一、创建 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 → 安装项目 如图 :

3、由于我们是安装服务,就不需要用户桌面和程序菜单了,直接 应用程序文件夹(右击)→ 添加 → 项目输出 入图 :
注意:
[1] 项目选择中选择要安装的服务;[2] 项目选择下面要选择主输出。选择好后确定,这一步增加了安装程序的文件夹,下一步就是给这个安装程序增加操作。
4、这里增加两个基本操作,一个是安装,一个是卸载。安装项目(右击) → 视图 → 自定义操作 如图:
上面可以看到有安装,提交,回滚,卸载等操作,我们先增加安装操作,安装(右击)→ 添加自定义操作, 如图:
选择应用程序文件夹,并选中之前增加的主输出项,确定,这样这个安装程序就增加了安装的操作,同样按照这样的方式增加卸载操作,卸载与安装唯一不同的是需要设置一个命令参数,不可少,如图:
这里 Arguments 里输入 /u 表示卸载命令相当于 InstallUtil.exe /u 服务路径 , 到这里 ,安装程序就制作好了,生成安装程序项目,将会生成 setup.exe 和 setup.msi 安装文件,拷贝到客户端,点击setup.exe 就像安装QQ一样安装我们的服务。