本文主要是讲解怎么做一个Windows Service及带卸载功能的安装包,并在安装完服务后自动启动服务。
以下内容是基于VS2010、C#、.net 4.0
VS2015是不带VSI的,可下载扩展插件安装,插件下载地址:Microsoft Visual Studio 2015 Installer Projects
相关工程源码下载地址:http://download.csdn.net/detail/yeqi3000/9400613
创建服务
我们先创建一个最基本的Windows Service项目,如下图:
接下来为该Service添加安装程序,打开Service1的设计界面,右键菜单选择“添加安装程序”。
安装程序界面共有2个控件:serviceProcessInstaller1,serviceInstaller1
serviceInstaller1属性介绍:
DelayedAutoStart:是否延迟启动
Description:服务的描述信息
DisplayName:服务的显示名称
ServiceName:服务名称
StartType:启动方式(一般要手动设置为Automatic以便服务在系统启动后就自动运行)
要使得安装包安装服务后能自动启动服务,则必须对ProjectInstaller.cs后台代码做如下编码,其中的服务名称要与你的服务名称一致才行:
创建安装包
如图创建一个安装包项目:
创建成功后,对安装项目做如下配置,具体每个参数的含义可以自己在工程里查看,图中我标记了一些比较常用的属性。
现在,我们将Service的项目输出添加到安装项目中:
操作顺序:
1、右键安装项目弹出快捷菜单
2、添加
3、项目输出
4、选择YvanService主输出。
接下来就是重点的安装服务的配置了。
操作顺序:
1、右键安装项目弹出快捷菜单
2、视图
3、自定义操作
4、安装
5、添加自定义操作
6、选择应用程序文件夹下的[主输出来自YvanService]后确定
7、提交->重复步骤5/6
8、卸载->重复步骤5/6
9、选择卸载下的自定义操作,配置其属性参数Arguments:/u
如图
至此,我们的服务安装包就制作完成了。
卸载
制作卸载功能有两种方式:
1、自建一个卸载程序,用代码调用msiexec.exe实现卸载。(这种方式的优点是可以自定义一些卸载步骤和UI)
2、利用Windows系统自带的msiexec.exe直接实现卸载。(优点是不用开发程序,配置非常简单)
下面我们来逐一讲解。
自定义卸载
为了展现自建卸载程序的优点,我这里选择使用winform方式来实现,如果追求简单,也可以使用控制台程序去实现,基本原理都是一样的。
首先,我们创建好一个winform项目后给窗体添加一个label,2个按钮并设置好样式和文本。
然后给2个按钮编写后台代码,其中红字部分要特别注意,这是你的安装程序的ProductCode,必须保持一致,否则就无效了。
到这里自定义的卸载项目就做好了,接下来我们参照添加YvanService项目输出的方式把这个卸载项目输出到我们的安装项目中(YvanServiceSetup)
添加完毕后,我们在安装项目的文件系统下可以看到 uninstall的输出,接下来给这个输出创建快捷方式,右键选择 uninstall的输出,选择创建快捷方式菜单:
创建好快捷方式后,我们给它改名为:卸载YvanService,然后把它剪切后放到《用户的“程序”菜单》目录下,如果为了好看,可以在安装程序里添加进一个卸载图标文件,然后将这个图标文件设置给我们的卸载快捷方式。
然后就可以生成我们新的安装包了,安装后如下图效果:
系统自带卸载
这种方式其实原理和自定义一样,都是利用msiexec.exe来实现,首先我们找到系统自带的msiexec.exe,将它复制到我们的工程文件夹下:
为了看上去更像一个卸载程序,我们给它改个名:uninstall2.exe,然后用同样的方式添加到我们的安装程序中并创建快捷方式,为了区分,我们给这个快捷方式取名:
卸载YvanService(系统自带)
然后设置其属性:Arguments=/x {677063B1-9FD2-490E-99D0-F6137582A61F}
这里的属性值其实是和自建卸载程序的后台代码参数是一样的。
好了,第二种方式的卸载程序也制作完毕,我们再次生成新的安装包,安装完成后,效果如下图: