Windows Service 之 详解(二)

一、创建 Windows 服务程序

  1、文件 → 新建 → 项目 → 选择 Windows 服务模板,创建 WinService 项目;

  选择这个服务的属性,可以打开属性对话框。可配置如下值:

  [1] AutoLog 指定把启动和停止服务的事件自动写到事件日志中;

  [2] CanPauseAndContinue、CanShutdown 和 CanStop 指定服务可以处理暂停、继续、关闭和停止服务的请求;

  [3] ServiceName 是写到注册表中的服务的名称,使用这个名称可以控制服务;

  [4] CanHandleSessionChangeEvent 确定服务是否能处理终端服务器会话中的改变事件;

  [5] CanHandlePowerEvent 选项对运行在笔记本电脑或移动设备上的服务有效。如果启用这个选项,服务就可以响应低电源事件,并相应的改变服务的行为。

  注意:在服务开发的初始阶段,一定要在属性窗口把服务的名称改为比较适当的名称。

  

二、添加服务安装程序

  切换到服务程序设计试图,右键 → 添加安装程序,给服务添加安装程序。使用 “ 添加安装程序 ”选项时,新建一个 ProjectInstaller 类、一个ServiceInstaller 实例 和 一个 ServiceProcessInstaller 实例。

  1、安装程序类

  ProjectInstaller 类派生自 System.Configuration.Install.Installer,后者是所有自定义安装程序的基类。

  2、ServiceProcessInstaller 类 和 ServiceInstaller 类

  在 InitializeComponent() 方法的实现代码中,创建了 ServiceProcessInstaller 类 和 ServiceInstaller 类的实例。这两个类都派生于 ComponentInstaller 类本身派生于 Installer 类。

  注意:一个服务进程可以包括多个服务。ServiceProcessInstaller 类用于配置进程,为这个进程中的所有服务定义值,而 ServiceInstaller 类用于服务的配置,因为每个进程都需要 ServiceInstaller 类的一个实例。如果进程中有3个服务,则必须添加3个 ServiceInstaller 对象。

  3、ServiceInstallerDialog 类

  System.ServiceProcess.Design 名称空间中的另一个安装程序类是 ServiceInstallerDialog。在安装过程中,如果希望系统管理员输入该服务应使用的账户(具体方法是指用户名和密码),就可以使用这个类。

  4、安装 和 卸载服务

  (一)安装命令安装

  使用 installutil.exe 实用程序:

  [1] 安装命令:installUitl 服务名.exe,如下:

  

  [2] 卸载命令:installUitl /u 服务名.exe

  

  (二)安装程序安装

  1、添加安装程序:解决方案(右击)→ 添加 → 新建项目 → 其他项目类型 → 安装和部署 → Visual Stadio Installer → 安装项目   如图 :

  

 
     2、创建后,安装项目(右击) → 视图 → 文件系统 如图:
  
 

     3、由于我们是安装服务,就不需要用户桌面和程序菜单了,直接 应用程序文件夹(右击)→ 添加 → 项目输出 入图 :

  

  注意:

  [1] 项目选择中选择要安装的服务;[2] 项目选择下面要选择主输出。选择好后确定,这一步增加了安装程序的文件夹,下一步就是给这个安装程序增加操作。

  4、这里增加两个基本操作,一个是安装,一个是卸载。安装项目(右击) → 视图 → 自定义操作 如图:

  

  上面可以看到有安装,提交,回滚,卸载等操作,我们先增加安装操作,安装(右击)→ 添加自定义操作, 如图:

  

      选择应用程序文件夹,并选中之前增加的主输出项,确定,这样这个安装程序就增加了安装的操作,同样按照这样的方式增加卸载操作,卸载与安装唯一不同的是需要设置一个命令参数,不可少,如图:

  

      这里 Arguments 里输入 /u  表示卸载命令相当于 InstallUtil.exe /u 服务路径  , 到这里 ,安装程序就制作好了,生成安装程序项目,将会生成 setup.exe 和 setup.msi 安装文件,拷贝到客户端,点击setup.exe 就像安装QQ一样安装我们的服务。

原文地址:https://www.cnblogs.com/xinaixia/p/5034506.html