.net Windows Service安装包制作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yeqi3000/article/details/50475437

本文主要是讲解怎么做一个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}

这里的属性值其实是和自建卸载程序的后台代码参数是一样的。


好了,第二种方式的卸载程序也制作完毕,我们再次生成新的安装包,安装完成后,效果如下图:




猜你喜欢

转载自blog.csdn.net/yeqi3000/article/details/50475437