Windows Service开发(部分内容来源于网络)
Windows Service开发
一、定义与使用场景
Windows 服务是可以在系统启动时自动打开的程序。如果需要在没有用户交互操作情况下运行程序,或者在权限比交互式用户更大的用户下运行程序,就可以创建 Windows 服务。
二、Windows 服务的体系架构
操作 Windows 服务需要3种程序:
• 服务程序
• 服务控制程序
• 服务配置程序
服务程序本身用于提供需要的实际功能。
服务控制程序可以把控制请求发送给服务,如开始、停止、暂停和继续。
服务配置程序可以安装服务,也可以在以后改变服务的配置。
三、服务程序
服务程序实现服务的功能。服务程序需要 3 个部分:
• 主函数
• service-main 函数
• 处理程序
服务的主函数是程序的一般入口点,即Main()方法,它可以注册多个 service-main 函数,service-main 函数包含服务的实际功能。服务必须为所提供的每项服务注册一个 service-main 函数。
四、Windows 服务的类
可以在System.ServiceProcess名称空间中找到实现服务的 3 部分的服务类:
• 服务程序必须从 ServiceBase 类继承才能实现服务。ServiceBase 类用于注册服务、响应开始和停 止请求。
• ServiceController类用于实现服务控制程序。使用这个类,可以把请求发送给服务。
• ServiceProcessInstaller类和ServiceInstaller类用于安装和配置服务程序。
五、创建Windows服务程序
1、新建项目,选择Windows服务,如下图:

2、 创建好后,编译器会自动创建一些文件,其中会有一个Service1类文件,该文件是服务的关键,我们可以将其重命名,这里我将其命名为DoorService,如下图:

3、 在DoorService的后台代码中会自动创建一些方法,包括服务的启动和停止方法等,如下图:

4、 将服务启动时要执行的操作放在OnStart方法中,服务停止时要执行的操作放在OnStop方法中。我们这里写了个定时器,每秒钟往文本文件中写入当前时间。
5、 在DoorService.cs设计器中,单击右键,选择选择添加安装程序,便会生成一个ProjectInstaller.cs的文件,如图所示,其中包含了一个ServiceInstaller和一个ServiceProcessInstaller,我们可以对这两个组件重命名。


6、 设置ProjectInstaller.cs的属性,切换到属性设置界面
(1) 选择serviceInstaller1,按F4并设置相应属性如下图所示:

这些属性对应Windows服务中的字段,如下图:

其中:Description属性用于设置服务安装之后再服务界面上显示的描述信息;
DisplayName属性用于设置服务安装之后再服务界面上显示的服务名称;
ServiceName属性用于设置服务的名称,此名称必须与ServiceBase类的ServiceName属性设置的名称一致,该名称用于系统标识此服务,可以理解成DisplayName为ServiceName的别名;
StartType属性用于设置服务的启动方式。
(2) 选择serviceProcessInster1,按F4设置其属性如下:

此处主要设置Account属性,该属性用来指示运行该服务时的账户类型,一般设置为LocalService。该属性默认值是User(这里是个坑,因为选择为User的服务在启动时需要输入账户用户名和密码)
六、服务的安装
windows服务的安装需要使用到InstallUtil.exe,这个文件路径如下,
InstallUtil.exe(x86) C:\Windows\Microsoft.NET\Framework\v4.0.30319
InstallUtil.exe(x64) C:\Windows\Microsoft.NET\Framework64\v4.0.30319
使用x86安装还是x64安装取决与项目配置,右键项目,选择属性

为方便起见,我们把项目对应的InstallUtil.exe拷贝到我们的项目中。
同理再新建两个2个bat文件用于安装和卸载服务,也拷贝到项目中去
Install.bat
%~dp0InstallUtil.exe %~dp0项目名称.exe
Net Start 服务名称
sc config 服务名称 start= auto
pause
Uninstall.bat
%~dp0InstallUtil /u %~dp0项目名称.exe
Pause
项目名称:该WinService服务项目的名称
服务名称:是serviceInstaller1中配置的ServiceName
在本案例中,Install.bat内容如下:
%~dp0InstallUtil.exe %~dp0MyServices.exe
Net Start DoorService
sc config DoorService start= auto
pause
UnInstall.bat的内容如下:
%~dp0InstallUtil /u %~dp0MyServices.exe
Pause
把这3个文件粘贴到项目中以后,选中,右键属性

在“复制到输出目录”项,选择“始终复制”。
右键项目,生成,然后到项目目录下的打开bin文件夹,根据生成方式,打开Debug/Release文件夹。
将里边的内容拷贝到服务器。执行Install.bat即可进行安装。注意,执行安装卸载bat需要管理员权限运行:即右键Install.bat/Uninstall.bat→以管理员身份运行。
浙公网安备 33010602011771号