聊聊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 ...
随机推荐
- 05 drf源码剖析之认证
05 drf源码剖析之认证 目录 05 drf源码剖析之认证 1. 认证简述 2. 认证的使用 3. 源码剖析 4. 总结 1. 认证简述 当我们通过Web浏览器与API进行交互时,我们可以登录,然后 ...
- Flask 基础组件(一):基本使用
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- Navicat连接数据库报错2059 - authentication plugin...错误解决方法
今天使用Navicat 连接MySQL数据库出现错误:2059 - authentication plugin 'caching_sha2_password'. 出现这个错误的原因是因为MySQL8. ...
- 数据规整:连接、联合与重塑知识图谱-《利用Python进行数据分析》
所有内容整理自<利用Python进行数据分析>,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载或者右击保存图片. 其他章 ...
- As 布局文件太多很乱的问题
//添加自定义文件整理文件夹的方法,没有之一在build.gradle(Module: app)里加入布局需要放入的路径代码>>>>>> sourceSets { ...
- Spring-Boot 多数据源配置+动态数据源切换+多数据源事物配置实现主从数据库存储分离
一.基础介绍 多数据源字面意思,比如说二个数据库,甚至不同类型的数据库.在用SpringBoot开发项目时,随着业务量的扩大,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源. ...
- 9.CSMA_CD协议
先听再说,边听边说 载波监听多点接入/碰撞检测CSMA/CD( carrier sense multiple access with collision detection) CD:碰撞检测(冲突检测 ...
- [redis] -- 持久化机制篇
快照(snapshotting)持久化(RDB) 该方式是redis默认 持久化方式 Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本.Redis创建快照之后,可以对快照进行备 ...
- Win10系统报错问题集锦
收集记录win10的坑 错误1 应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC) 中的用户 NT AUTHORITY\SYS ...
- Java应用服务器之tomcat session server msm搭建配置
在上一篇博客中,我们介绍了tomcat自带的cluster组件配置session replication cluster,回顾请参考https://www.cnblogs.com/qiuhom-187 ...