为C# Windows服务添加自动安装包【转 + 修正】
为C# Windows服务添加安装程序
首先,当然是创建一个Windows服务的项目。这个大家应该都知道怎么做(这都不明白的留言问我),然后要给服务“添加安装程序”,如图1所示:(这一步和自己用InstallUtil注册是完全一样的)![点击查看原始大小图片](http://dl.javaeye.com/upload/attachment/162412/eeed61ee-fb41-3db4-96fa-6bf0e6ef4732.jpg)
(图1)
添加后,会出来一个serviceProcessInstal1,还有serviceInstaller1,如果你一个项目里有两个服务的话,这里就会有两个serviceInstaller类,如图2:
![点击查看原始大小图片](http://dl.javaeye.com/upload/attachment/162414/69244f6e-7826-35f2-b029-5b88f9461eaa.jpg)
(图2)
图3是serviceProcessInstal1的属性页,其中Account就是指用于运行服务的帐户,如果只是用于本地,可以选LocalSystem(本地系统),这是本地的最高权限,并可以选择和桌面交互功能。如果安全性考虑的话,请选择适合自己的。
![](http://dl.javaeye.com/upload/attachment/162416/89b590b2-709f-32ac-9d8e-44509b4e76f0.jpg)
(图3)
图4是serviceInstaller2的属性页,其中DisplayName就是显示在Windows服务管理器中的服务名 称,Desciption是服务的说明。下面ServiceName是服务内部名称。最关键的是下面的StartType,是指服务的启动方式,是自动, 手动和禁用三种。
![](http://dl.javaeye.com/upload/attachment/162418/5a24ea30-a305-3468-b580-b34dbb5edea9.jpg)
(图4)
下面,就是今天讲的重点了,点击“文件”->“添加”->“新建项目”(如图5)
![点击查看原始大小图片](http://dl.javaeye.com/upload/attachment/162420/daa40441-b933-353c-8aa7-d5895edcfef3.jpg)
(图5)
选择“其他项目类型”->“安装和部署”里的“安装项目”(如图6)
![](http://dl.javaeye.com/upload/attachment/162422/8b13b0a7-517d-3f38-a2e2-dcab319f3737.jpg)
(图6)
建好项目后,右键刚才新建的安装项目,选择“视图”->“文件系统”(如图7)
![](http://dl.javaeye.com/upload/attachment/162424/d092002e-c57b-3bcd-9615-e618959d7347.jpg)
(图7)
这时,打开了文件系统属性。可以看到,屏幕左边,出现了三项文件系统的内容,因为我们是Windows服务程序,不需要在开始菜单和桌面上放置图标,所以我们直接右键“应用程序文件夹”->“添加”->“项目输出”(如图8)
![点击查看原始大小图片](http://dl.javaeye.com/upload/attachment/162426/3d2f4ea3-534a-32ba-a7f1-65f56e2dec95.jpg)
(图8)
在出来的对话框中,选择“主输出”和“Release XXX”,这个由你的项目属性决定,一般选择Release Any CPU。(如图9)
![](http://dl.javaeye.com/upload/attachment/162428/a104a923-f435-35a2-9399-0363d6b8a743.jpg)
(图9)
系统会自动把项目输出文件,也就是Windows服务程序的EXE文件和所有引用的类库文件都列在中间的框中。这时,为了方便安装,我们把InstallUtil.exe和两个我自己写的批处理文件一起添加进去。添加方法类似上面,只是把“项目输出”改成“文件”。
结果如图10所示:
![点击查看原始大小图片](http://dl.javaeye.com/upload/attachment/162430/fc0404ef-2d2e-3d2c-a2ca-070839743653.jpg)
(图10)
接下来,就该配置一下安装过程,让安装程序自动给我们安装和卸载Windows服务。
还是右键安装项目,选“视图”->“自定义操作”,如图11:
![](http://dl.javaeye.com/upload/attachment/162432/911f9286-2621-3d01-ba2f-b18db57d0dc1.jpg)
(图11)
左边的窗口换到了自定义操作的视图了,右键“安装”->“添加自定义操作”(图12),出现的对话框中,选中“应用程序文件夹”,再选中其 中的InstallUtil.exe文件(图13),添加好后,会在安装操作下面多出一个InstallUtil.exe的分支。点一下它,在右边的属性 页里,设置Arguments=“ 你的Windows服务文件名”,如图14(注意文件名前要留一个空格)
![](http://dl.javaeye.com/upload/attachment/162434/a266ba29-4eb2-326d-a3a5-8e5724e77237.jpg)
(图12)
![](http://dl.javaeye.com/upload/attachment/162436/c1cd50c1-3ddd-33cd-ae72-00892b7aafaf.jpg)
(图13)
![](http://dl.javaeye.com/upload/attachment/162438/c9e020af-3b4b-3ec5-92e6-57b5e356b8cd.jpg)
(图14)
同样,在提交和卸载处,也添加InstallUtil.exe,不过属性页中设置Arguments=“ -u 你的Windows服务文件名”,这样,安装程序就能实现自动安装注册和卸载Windows服务了。
【以下修正】
->
其实简单的做法只要在安装,提交,回滚,卸载 都添加项目的主输出的话也是可以达到自动注册/卸载服务 功能的,而且不 依赖于InstallUtil.exe(如图15)
<-
经过多次的测试才发现,这一步骤是有问题的!
添加完InstallUtil.exe 后,在安装,提交,回滚,卸载 都添加项目的主输出才能自动安装服务。且顺序必须是先添加InstallUtil.exe,再添加项目的主输出!!!
![点击查看原始大小图片](http://dl.javaeye.com/upload/attachment/162440/f49d4b3a-3799-3910-ba7b-3c37dacec838.jpg)
(图15)