本文转载自:http://kamiff.iteye.com/blog/507129

最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多。像后台运行不阻塞系统,不用用户登录之类。哈 哈,扯远了,今天讲一下那个怎么给Windows服务做个安装包。为什么做安装包?当然是方便了,不用每次调用InstallUtil,还有,就是看上去 正规些。

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

(图1)

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



(图2)

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

(图3)

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

(图4)

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

(图5)

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

(图6)

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



(图7)

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

(图8)

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

(图9)

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

结果如图10所示:

(图10)

接下来,就该配置一下安装过程,让安装程序自动给我们安装和卸载Windows服务。

还是右键安装项目,选“视图”->“自定义操作”,如图11:

(图11)

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

(图12)

(图13)

(图14)

同样,在提交和卸载处,也添加InstallUtil.exe,不过属性页中设置Arguments=“ -u 你的Windows服务文件名”,这样,安装程序就能实现自动安装注册和卸载Windows服务了。其实简单的做法只要在安装,提交,回滚,卸载 都添加项目的主输出的话也是可以达到自动注册/卸载服务 功能的,而且不依赖于InstallUtil.exe(如图15)

(图15)

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

(图16)

(图17)

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

(转)为C# Windows服务添加安装程序的更多相关文章

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

    最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻塞系统,不用用户登录之类.哈哈,扯远了,今天讲一下那个怎么给Windows服务做个安 ...

  2. 制作Windows服务和安装程序(C#版)

    http://blog.sina.com.cn/s/blog_5f4ffa170100vt2b.html 1.创建服务项目: 打开VS 2005 编程环境,在C#中新建Windows服务程序 2.将安 ...

  3. WCF 下的windows服务的安装卸载

    安装:启动vs2010(如果是win2008要以管理员来启动)命令:installutil demo.exe 卸载:先在服务里停止这个服务,然后启动vs2010(如果是win2008要以管理员来启动) ...

  4. C# VS2010 windows服务的安装

    可能是太过于懒惰的原因,研究个windows 服务的安装程序都花了大半天时间.在网上看了一些示例,大部分都言过其实,把过程搞得太过复杂,老是需要去研究如何利用InstallUtil.exe及其参数.事 ...

  5. .net Windows服务程序和安装程序制作图解 及 VS 2010创建、安装、调试 windows服务(windows service)

    .net Windows服务程序和安装程序制作 最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作 ...

  6. Windows服务的安装及配合定时器编写简单的程序

    最近要实时统计一些数据,所以就用到了Windows服务及定时任务,在这里记录下. Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应 ...

  7. Windows服务一:新建Windows服务、安装、卸载服务

    Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面 ...

  8. [转]C#创建Windows服务与安装

    本文档用于创建windows服务说明,使用vs2010系统平台 创建项目 1 创建windows服务项目 2 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3 代码中OnStart ...

  9. Windows服务程序和安装程序制作

    转:http://www.cr173.com/html/15350_1.html 本文介绍了如何用C#创建.安装.启动.监控.卸载简单的Windows Service 的内容步骤和注意事项. 一.创建 ...

随机推荐

  1. uboot能ping通本机无法ping通本机上搭建的虚拟机

    注意 转载请注明出处:https://www.cnblogs.com/dakewei 一.背景 1.1 uboot不能被其它主机ping通,这是由于uboot没有对其它主机发送过来的arp包进行响应, ...

  2. System.data.sqlite安装

    在这个页面可以下载安装不同版本的 http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki x86的版本可以在64位机 ...

  3. Flask 3 程序的基本结构2

    NOTE 1.hello.py 通过修饰器的route方法添加动态路由: #!/usr/bin/env python from flask import Flask app = Flask(__nam ...

  4. 设计点滴&css效果点滴

    走向设计师的第一步, 做一个自由的设计师. 优秀的移动端设计的:http://www.cnblogs.com/coding4/p/6842849.html 一些好的设计图片的收藏,一些好的设计理念,一 ...

  5. Linux命令详解-printf

    printf命令格式化并输出结果到标准输出. 1.命令格式: printf (选项) (参数) 2.命令功能: echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开,并在最后加上换行号. ...

  6. UVALive-3415 Guardian of Decency (最大独立集)

    题目大意:一个老师要带一些学生去春游,但是要带的学生中任意两个人都满足下面四个条件中的至少一个:1.性别相同:2.身高差大与40公分:3.最喜欢的音乐类型不同:4.最喜欢的体育运动相同.问老师最多能带 ...

  7. python批量给云主机配置安全组

    python批量给云主机配置安全组 用公有云的思路去思考去实现一个安全稳定.可伸缩和经济的业务构架,云运维是有别与传统运维的,比如说了解公有云的都知道安全组的概念,安全组跟防火墙功能很相似,那我的机器 ...

  8. JavaScript---详解scroll

    scroll scroll--译为‘滚动’,他是非常常用的属性. 滚动宽高 scrollHeight scrollHeight表示元素的总高度,包括由于溢出而无法展示在网页的不可见部分(不要误解为只有 ...

  9. java读取和写入浏览器Cookies

    首先我们认识下什么是cookies: cookie实际上是一个存在你硬盘里的数据,但是这些数据很特殊,只能由web应用提交给浏览器帮助存储,并且我们还能读取浏览器存在本地的cookie web应用一般 ...

  10. 基于Open XML 导出数据到Excel

    数据导出的结果: 步骤1.新建一个Excel 文档,模板根据自己需要设置 步骤2.使用OpenXml  打开Excel 文件 步骤3.点击ReflectCode 功能,生成相应的代码文档 using ...