首页 > 代码库 > 如何创建WindowsService

如何创建WindowsService

创建Windows Service可分为以下几步:

1. 创建一个“Windows Service”项目

技术分享

 

2. 设置服务的相关属性,以确定服务的名称及工作机制

属性设置
ServiceName服务名称。ServiceName 属性的值必须始终与安装程序类中记录的名称匹配。 如果更改此属性,则必须也更新安装程序类的 ServiceName 属性。
CanStopTrue 指示服务将接受停止运行的请求;false 指示禁止停止运行服务,而且“服务控制管理器”会禁用停止服务的菜单选项。
CanShutdownTrue 指示服务希望在运行该服务的计算机关闭时收到通知,以便能够调用 OnShutdown 过程。
CanPauseAndContinueTrue 指示服务将接受暂停或继续运行的请求;false 指示禁止服务暂停运行和继续运行,“服务控制管理器”会禁用相应的暂停或继续服务的菜单选项。
CanHandlePowerEventTrue 指示服务可以处理有关计算机电源状态更改的通知;false 指示禁止服务得到有关这些更改的通知。
AutoLogTrue 表示在服务执行操作时将信息项写入应用程序的事件日志;false 表示禁用此功能。

 

3. 访问代码编辑器,并为 OnStart 和 OnStop 过程填写所需的处理。(这两个方法在服务中是必不可少的)

4. 重写其他所有要为其定义功能的方法。如OnShutdown、onContinue、OnPause、OnPowerEvent等方法。

5. 添加服务应用程序所必需的安装程序。

  添加安装程序的方法如下:双击要为其添加安装组件的服务,打开其“设计”视图

技术分享

然后单击设计器的背景以选择服务本身,而不是它的任何内容,设计器具有焦点时,右击然后单击“Add Installer”。

技术分享

这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller,并且服务的属性值被复制到组件。

对于每个服务应用程序,在 ProjectInstaller 类中至少有两个安装组件:ServiceInstaller 组件为项目中的所有服务安装进程,ServiceProcessInstaller 组件是应用程序所包含的每项服务的安装程序。 
技术分享

单击 ServiceInstaller 组件,验证 ServiceName 属性的值和服务本身的 ServiceName 属性的值是否相同。(注意:两者必须一致)

Description属性对应“服务控制管理器”中的“描述”

DisplayName属性对应“服务控制管理器”中的“名称”

StartType 属性确定如何启动服务,它有如下三个选项:

        Manual 服务安装后,必须手动启动。
        Automatic 每次计算机重新启动时,服务都会自动启动。
        Disabled 服务无法启动。

单击 ServiceProcessInstaller 组件并设置Account 属性属性值,可以确定将要运行服务的安全上下文。

默认情况下,服务与已登录的用户在不同的安全上下文中运行。 服务在称为 LocalSystem 的默认系统帐户的上下文中运行,该帐户给服务提供的系统资源访问特权不同于给用户提供的。 可以更改此行为,指定一个不同的用户帐户来运行服务。可以通过操作运行服务的进程的Account 属性来设置安全上下文。 这一属性允许您将服务设置为以下 4 种 Account 类型之一:

  • User ,当服务已安装并且在由网络上的单一用户指定的帐户的上下文中运行时,该类型将使系统要求提供有效的用户名和密码;

  • LocalService ,该类型在用作本地计算机上的非特权用户并向任意远程服务器显示匿名凭据的帐户的上下文中运行;

  • LocalSystem ,该类型在提供多种本地特权并向任意远程服务器显示计算机凭据的帐户的上下文中运行;

  • NetworkService ,该类型在用作本地计算机上的非特权用户并向任意远程服务器显示计算机凭据的帐户的上下文中运行。

 

6. 通过从“生成”菜单中选择“生成解决方案”来生成项目。

7. 安装服务。与在 Visual Studio 中创建的大多数项目不同,Windows 服务项目不能通过按 F5 从开发环境直接运行。 这是因为必须安装项目中的服务后,项目才能运行。

 安装服务和卸载服务有两种方式:

手动安装服务

       1. 在运行中输入“CMD”打开命令行,然后进入到编译好的服务所在目录

       2.  在命令行中输入下列代码:installutil yourproject.exe

 注意:如果输入命令后,提示installutil不是内部命令,可以找到installutil.exe所在目录,然后将其路径配置到环境变量中。一般.net framework4中,installutil.exe所在目录如下:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

如果不想配置环境变量,还有个变通的方法,将installutil.exe拷贝到编译好的服务所在目录,然后通过命令行安装。

手动卸载服务的步骤跟安装的步骤一样,只是命令中多了个参数: installutil /u yourproject.exe

 

通过批处理脚本安装卸载服务

 打开记事本,键入相应命令,将其保存为bat格式即可

安装脚本:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe yourproject.exe
Pause

 

卸载脚本

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u yourproject.exe
Pause

 

如何创建WindowsService