聊聊WindowServer那些事!
前言说明
- 使用工具:VS2019
- 思考为什么要使用WindowServer,它能做什么了?(后面解答)
一:什么是WindowServer?(我们做的是一个什么东西?)
        Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。(微软爸爸是这么解释,简单介绍)
        我的理解,它就是一个挂载在我们系统上的服务,我们系统上服务其实有很多,比如我们的Sql数据库的服务:MSSQLSERVER,这个是启动数据库的一个服务,开启这个服务我们才能连接本地的安装的SQL。那WindowServer应该也是一个这样的服务,可以理解是一个可以让我们自定义开发的服务。

二:如何创建WindowServer?(我们知道是什么东西,怎么做?)
1.打开VS2019,类别选择服务,选择Windows服务类别

2.添加安装程序


安装之后,目录会添加新文件

2.1看看这两个文件
serviceInstaller1:

用的多的属性:
- DelayedAutoStart:是否自动启动
- Descrition:介绍服务(自定义)
- DisplayName:标识服务器友好名称(自定义)
serviceProcessInstaller1:

- Account:设置为LocalSystem(运行此服务的账户类型)
到此,一个服务就写好,只是他还没有任何灵魂(业务逻辑)
三:怎么编写我们的业务逻辑?(在哪里注入我们的灵魂)
3.1打开Service1类,按F7进入代码界面,如下图所示:

当前类有3个方法:
- Service1:构造函数
- OnStart:启动服务时会触发的方法(可以传递参数)
- OnStop:结束服务时会触发的方法
3.2我们在OnStart和OnStop进行日志打印,代码如下:
  public Service1()
        {
            InitializeComponent();
            eventLog1 = new System.Diagnostics.EventLog();
            if (!System.Diagnostics.EventLog.SourceExists("MySource"))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
            }
            eventLog1.Source = "MySource";
            eventLog1.Log = "MyNewLog";
        }
        protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("In OnStart.");
            LogHelper.loginfo.Info("In OnStart.");
        }
        protected override void OnStop()
        {
            eventLog1.WriteEntry("In OnStop.");
            LogHelper.loginfo.Info("In OnStop.");
        }
这里,我使用两种日志进行打印我们的日志信息
- EventLog:这个是系统自带一个控件(也是微软教程中使用的日志记录)
- log4net:这个是一个第三方库日志程序集
看看效果:
Eventlog:(日志数量有限制,超过一定的数量就不会在显示了)

log4net:(自定义,想怎么存,怎么存【推荐】)

四:编写好的服务,如何安装?(安装发动机)
4.1首先编译程序(快捷键:CtrL+Shift+B),生成项目
4.2找到目标文件
- 右键项目,选择在文件资源管理器中打开文件夹
- 找到Debug文件夹下面后缀为****.exe程序
- 赋值路径:绝对路径,类是于:[D:****.exe]
- 看看路径【C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools】,找到工具:Developer Command Prompt for VS 2019允许启动
4.3 在打开的CMD中,输入命令:
InstallUtil.exe C:\**\test\bin\Debug\test.exe

如上图标识已经安装成功!
五:安装好,如何启动?(点火启动)
输入命令:
net start 你定义的服务的名称【二:如何创建WindowServer=>2.添加安装程序=>DisplayName】

如上图表示启动成功
六:不想用了,如何停止?(关火休息)
输入命令:
net stop 你定义的服务的名称【二:如何创建WindowServer=>2.添加安装程序=>DisplayName】

如上图表示关闭成功
七:不想要了,如何卸载?(拆掉发动机)
输入命令:
InstallUtil.exe /u C:\**\test\bin\Debug\test.exe

如上图表示卸载成功
八:参考文档
九:总结
我为什么要做这个WindwoServer,是公司需要做一个运维软件,需要编写一个Windows服务,我也是看着官方文档学习的,业务逻辑比较简单, 开发也挺快的。
自己对Window服务理解,我们其实这种服务也是一个程序,只是它集成到Windows系统服务中,这样有一个好处,可以设置开机自动启动,而且还神不知鬼不觉,在客户电脑上安装,客户也不知道,我们是做运维监控,不是干坏事。可以把一些需要执行的任务,做成服务,放在服务器或自己电脑服务上,就可以自动跑,设置开机自起。
十:不足的地方
- 本文没有介绍 EventLog是怎么来:这个在工具箱中,可以找到,然后点击Service1,做进来就行了
- 服务默认是启动和停止方法,还可以扩展,有暂停,恢复,这两个方法,需要我们重写才能触发事件
聊聊WindowServer那些事!的更多相关文章
- IBM云的商业动作之我见(1):IBM 收购 OpenStack 托管私有云公司 Blue Box [IBM Acquired Blue Box]
		2015-06-10 IBM 刚刚(2015/06/03)宣布收购 Blue Box 公司.本文就聊聊这点事. 1. Blue Box 是做什么的?它是一家中小型托管私有云提供商. 1.1 公司的简单 ... 
- 使用.NET开发AutoCAD——设计师不做画图匠(一)
		(一)前言--如何避免加班那些事 我是谁?我是一名工程设计师,有点"不务正业",在工作之余长期从事软件开发工作,开发了公路铁路行业广泛应用的设计软件.说正题之前,聊聊加班那些事.话 ... 
- 关于Python编程的一些问答
		关于Python编程的一些问答 导语 大约1个月前,oschina.net和华章图书一起合作做了一个活动:OSC第51期高手问答--聊聊python那些事,来推广我参与撰写的书<编写高质量代码: ... 
- Android Jetpack之AppCompat(一)
		今天我们来聊一聊有关AppCompat,作为Android Jetpack系列文章的开篇.说到Android Jetpack,我们先看一下这张图: 从图中我们可以看到,整个Android Jetpac ... 
- 漏洞应急响应之批量poc验证
		1.文章难易度 [★★★] 2.文章知识点: python,poc验证; 3.文章作者: 野驴 4.本文参与 i春秋学院原创文章奖励计划,未经许可禁止转载! 0x01前言 当互联网爆出高危漏洞,或者团 ... 
- Nginx的负载均衡的几种方式
		Nginx的负载均衡的那点事 本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分 ... 
- nginx的负载均衡的问题
		本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ... 
- Nginx网络负载均衡,负载均衡,网络负载,网络均衡
		本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ... 
- 聊聊iOS中网络编程长连接的那些事
		1.长连接在iOS开发中的应用 常见的短连接应用场景:一般的App的网络请求都是基于Http1.0进行的,使用的是NSURLConnection.NSURLSession或者是AFNetworking ... 
随机推荐
- Django之 url组件
			本节内容 路由系统 models模型 admin views视图 template模板 路由系统 我们已知,用户从浏览器发出的请求会首先打到django url的路由分发系统这里,然后再到views视 ... 
- java学习第七天2020/7/12
			一. java继承使用的关键字是 extend class 子类 extends 父类{} 举一个类的例子: public class person { public String name; pu ... 
- bzoj3767A+B Problem加强版
			bzoj3767A+B Problem加强版 题意: 求两个数的和,每个数绝对值≤10^(10^7). 题解: 又用Python水过了…… 代码: a=raw_input() b=a.split() ... 
- T133309 57级返校测试重测-T2-选票统计
			大致题意: 找出个数超过n/4的数们. 基本思路: 一开始我是用map做的,然后就很玄学的TLE了. 啊,那就换个法吧. 先排个序,然后一样的数就在一起了, 再然后直接从前往后遍历一下,就能得出结果了 ... 
- mdk/iar汇编区别
			在代码移植中,经常遇到iar的代码转换问题,在此不间断记录一些,个人感觉还是IAR的更接近C一些,备查: 1. #ifdef的使用 // IAR #ifdef MACRO_XX #endif // M ... 
- InceptionV4
			目录 1. inception v4 2. Inception-resnet-v1 & Inception-resnet-v2 2.1 Inception-resnet-v1的组成模块 2.2 ... 
- Linux安装禅道项目管理软件
			1.从官网上面下载禅道的rpm文件 #wget http://dl.cnezsoft.com/zentao/7.1/zentaopms-7.1.stable-1.noarch.rpm 2.用指令安装 ... 
- 02 安装net-tools工具
			01 登录虚拟机,没错,还是那个熟悉的黑窗口 02 输入用户名密码(我还是习惯使用root用户,因为,它可以为所欲为) 小知识:注意红色框内的符号: 一般用户为限制用户,符号为:$ 超级用户,为无限制 ... 
- STL源码剖析:仿函数
			仿函数就是函数对象 函数对象: 重载了operator()的类对象 使用起来和普通函数一致,所以称为函数对象或是仿函数 STL中对于仿函数的参数进行了特殊处理,定义了两个特殊类,类里面只有类型定义 一 ... 
- consul++ansible+shell批量下发注册node_exporter
			--日期:2020年7月21日 --作者:飞翔的小胖猪 文档功能说明: 文档通过ansible+shell+consul的方式实现批量下发安装Linux操作系统监控的node_exporter软件, ... 
