为C# Windows服务添加安装程序

      首先,当然是创建一个Windows服务的项目。这个大家应该都知道怎么做(这都不明白的留言问我),然后要给服务“添加安装程序”,如图1所示:(这一步和自己用InstallUtil注册是完全一样的)

      (图1)

      添加后,会出来一个serviceProcessInstal1,还有serviceInstaller1,如果你一个项目里有两个服务的话,这里就会有两个serviceInstaller类,如图2:

      (图2)

      图3是serviceProcessInstal1的属性页,其中Account就是指用于运行服务的帐户,如果只是用于本地,可以选LocalSystem(本地系统),这是本地的最高权限,并可以选择和桌面交互功能。如果安全性考虑的话,请选择适合自己的。

      图4 是serviceInstaller2的属性页,其中DisplayName就是显示在Windows服务管理器中的服务名称,Desciption是服 务的说明。下面ServiceName是服务内部名称。最关键的是下面的StartType,是指服务的启动方式,是自动,手动和禁用三种。

      下面,就是今天讲的重点了,点击“文件”->“添加”->“新建项目”(如图5)

      选择“其他项目类型”->“安装和部署”里的“安装项目”(如图6)

      建好项目后,右键刚才新建的安装项目,选择“视图”->“文件系统”(如图7)

      这时,打开了文件系统属性。可以看到,屏幕左边,出现了三项文件系统的内容,因为我们是Windows服务程序,不需要在开始菜单和桌面上放置图标,所以我们直接右键“应用程序文件夹”->“添加”->“项目输出”(如图8)

      在出来的对话框中,选择“主输出”和“Release XXX”,这个由你的项目属性决定,一般选择Release Any CPU。(如图9)

      系统会自动把项目输出文件,也就是Windows服务程序的EXE文件和所有引用的类库文件都列在中间的框中。这时,为了方便安装,我们把InstallUtil.exe和两个我自己写的批处理文件一起添加进去。添加方法类似上面,只是把“项目输出”改成“文件”。

      接下来,就该配置一下安装过程,让安装程序自动给我们安装和卸载Windows服务。还是右键安装项目,选“视图”->“自定义操作”,如图11:

      左 边的窗口换到了自定义操作的视图了,右键“安装”->“添加自定义操作”(图12),出现的对话框中,选中“应用程序文件夹”,再选中其中的 InstallUtil.exe文件(图13),添加好后,会在安装操作下面多出一个InstallUtil.exe的分支。点一下它,在右边的属性页 里,设置Arguments=“ 你的Windows服务文件名”,如图14(注意文件名前要留一个空格)

      同样,在提交和卸载处,也添加InstallUtil.exe,不过属性页中设置Arguments=“ -u 你的Windows服务文件名”,这样,安装程序就能实现自动安装注册和卸载Windows服务了。(如图15)

      接下来就该让Windows服务和安装项目同时被编译了。右键点击解决方案,选择“属性”(如图16),在出来的对话框中,勾上安装项目后面的生成。(如图17)

      最后,右键解决方案,选择“生成解决方案”,这时vs会将两个项目都会编译出来。不过要注意一点:项目的启动顺序一定要Windows服务项目在前,安装项目在后。

      

      以上是我个人的一点小小经验,如果有同行愿意指教或者交流,请留言联系。

      最早写windows服务的时候,不知道如何用制作安装程序来安装。通常都是用命令InstallUtil来安装卸载,但我记性不好,这个讨厌的命令总记不住,而且,用这个命令安装后,在service里面看不到所启动的服务。
    后来找了下资料,终于找到如何制作windows service安装程序,用安装程序,会自动在service里面增加该服务,可以随意停止启动,也可以用自带的删除程序来删除,使用非常方便,唯一的问题是每次打包需要很长时间。
都使用了windows service installer快两年了,还是记不住如何去使用。(人懒没办法),现在整理出来:
1.将写好的windows服务切换到设计视图,右键-添加安装程序
2. 切换到新生成的ProjectInstaller.cs设计视图,找到serviceProcessInstaller1对Account属性设置为 LocalSystem,对serviceInstaller1的ServiceName属性设置为Server1(服务的名字),StartType属 性设置为Automatic(系统启动的时候自动启动服务)
3.建立一个新的安装项目ServerSetup(我们为刚才那个服务建立一个安装项目)
4.右键-添加-项目输出-主输出-选择Service1-确定
5.右键-视图-自定义操作-自定义操作上(安装)右键-添加自定义操作-打开应用程序文件夹-选择刚才那个主输出-确定
6.右键-视图-自定义操作-自定义操作上(卸载)右键-添加自定义操作-打开应用程序文件夹-选择刚才那个主输出-确定 -设置(arguments属性='/u' 作为卸载时并卸载服务)
7.重新生成,在安装项目下的bin或release下,可找到可执行的安装程序,里面已经包含了所有需要的类库等。
8.双击安装程序安装后,在服务管理器中(我的电脑-右键-管理-服务和应用程序-服务)找到Server1服务,启动服务

如果想要在本地快速安装,调试,在安装项目上点击右键可实现快速安装卸载。


 

posted @ 2009-06-26 09:01  木饭  阅读(2645)  评论(1编辑  收藏  举报