新文章 网摘 文章 随笔 日记

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→以管理员身份运行。

 

posted @ 2020-07-01 15:50  岭南春  阅读(309)  评论(0)    收藏  举报