可能是太过于懒惰的原因,研究个windows 服务的安装程序都花了大半天时间。在网上看了一些示例,大部分都言过其实,把过程搞得太过复杂,老是需要去研究如何利用InstallUtil.exe及其参数。事实上,既然要安装.net下制作的windows服务,肯定首先得在目标机器上安装有.net框架。因此,InstallUtil.exe也一定已经存在目标机器上了,因而利用微软的傻瓜式操作就能很好地解决windows服务安装和卸载的问题。

过一段时间估计还要狠狠地利用windows服务来完成一些功能,为了加深印象,又回过头弄了一个名叫HelloWorldService的windows服务,用最简单的demo来完成所有的操作。这个服务的功能,仅仅是在它启动的时候创建一个HelloWorld.txt文件,里边写上Hello World!这几个简单的字母而已。

1、选择Visual C#->Windows->Windows 服务,创建一个HelloWorldService项目。

2、通过ServiceName更改服务的名称为”HelloWorldService“,这是最后在安装服务成功后在服务管理面板出现的名称。

 

3、将Service1.cs更名为HelloWorldService.cs,在其OnStart方法中写入简单的代码,用来实现创建文件并写入“Hello World!"这几个经典字母。

4、在HelloWorldService.cs的设计界面点右键,在弹出菜单中选择”添加安装程序“。

点击后出来的设计界面上添加了两个控件——ServiceProcessInstall和ServiceInstaller。

 
ServiceProcessInstall安装一个可执行文件,该文件包含扩展 ServiceBase 的类。该类由安装实用工具(如 InstallUtil.exe)在安装服务应用程序时调用。在这里主要是修改其Account属性。ServiceAccount指定服务的安全上下文,安全上下文定义其登录类型。
 
LocalService    充当本地计算机上非特权用户的帐户,该帐户将匿名凭据提供给所有远程服务器。 
LocalSystem    服务控制管理员使用的帐户,它具有本地计算机上的许多权限并作为网络上的计算机。 
NetworkService    提供广泛的本地特权的帐户,该帐户将计算机的凭据提供给所有远程服务器。 
User    由网络上特定的用户定义的帐户。如果为 ServiceProcessInstaller.Account 成员指定 User,则会使系统在安装服务时提示输入有效的用户名和密码,除非您为 ServiceProcessInstaller 实例的 Username 和 Password 这两个属性设置值。

ServiceInstaller安装一个类,该类扩展 ServiceBase 来实现服务。在安装服务应用程序时由安装实用工具调用该类。在这里主要修改其StartType属性。此值指定了服务的启动模式。

Automatic 指示服务在系统启动时将由(或已由)操作系统启动。如果某个自动启动的服务依赖于某个手动启动的服务,则手动启动的服务也会在系统启动时自动启动。 
Disabled 指示禁用该服务,以便它无法由用户或应用程序启动。 
Manual 指示服务只由用户(使用“服务控制管理器”)或应用程序手动启动。

5、上面这些都是安装包最终要安装/卸载的对象。下面就来看看如何用.net制作安装包。
需要在解决方案里边添加一个安装项目,取其名称为HelloWorldSetup。

 
6、添加工程后,在默认的视图界面右键点击”应用程序文件夹“,选择”添加“->”项目输出“。
在弹出的窗口中选择“主输出”,点击“确定”。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7、上面的步骤定义了最后在应用程序文件夹中包含的内容。下面来定义其他方面的内容。在项目上点右键,选择 视图->自定义操作。
 
 
 
8、出来如下的界面,然后在”自定义操作“上点右键,选择”添加自定义操作“。

在弹出的窗口中双击”应用程序文件夹“。

 

然后选择”主输出来自HelloWorldService(活动)“,点击”确定“。

 

选择之后会发现所有的操作下边都添加了刚才选定的项。做到这一步,就能使安装程序卸载时不仅把程序卸载下来,也能把服务卸载下来。

 

9、接下来在安装项目上点右键,选择”生成“,就能使安装程序正常发布了,成功后会生成两个文件。

 

把这两个文件拷到目标机器上,双击HelloWorldSetup.msi文件,就可以开始安装服务的征途了。

 
安装成功后,就可以从服务管理面板中欣喜地看到我们梦寐以求的服务程序了。
 
不过在我点启动的时候,还出现了一段小插曲——系统报错了。错误如下图:

不过不用急,这种错误可以在系统的”事件查看器“中的”应用程序“选项中查看具体的错误信息。

 

呵呵,原来是由于服务对于文件系统的操作权限问题所引起的。跑回去一看,发现在第5步中对ServiceProcessInstaller的Account设置成了LocalService,于是乎改成了LocalSystem。然后重新发布安装程序,再重新安装服务,再启动,呵呵,一切正常!

10、最后,一起来欣赏这个windows 服务的成果:

 

参考:https://blog.csdn.net/wangzhen209/article/details/52931463

C# VS2010 windows服务的安装的更多相关文章

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

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

  2. Windows服务的安装卸载及错误查找

    @echo off echo 清理原有服务项. . . %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil /U D:\abc\te ...

  3. (转)为C# Windows服务添加安装程序

    本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻 ...

  4. C#操作windows服务,安装、卸载、停止、启动

    public class ServiceUtil { private string _ServiceName = string.Empty; private string _AppName = str ...

  5. 使用InstallUtil对Windows服务进行安装与卸载

    关于Visual Studio 2012中使用InstallUtil对Windows服务进行安装与卸载的文章,在MSDN中的http://msdn.microsoft.com/en-us/librar ...

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

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

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

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

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

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

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

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

随机推荐

  1. Jrebel 激活的方法

    jrebel  激活的方法: 试了很多都不好用,下面这个方法比较简单快捷.(不知道可以坚持多久) myjrebel 7月分官方正式停用,致使广大朋友无法使用jrebel/XRebel,可按如下地址进行 ...

  2. 【2018寒假集训 Day1】【位运算】翻转游戏

    翻转游戏(flip) [问题描述] 翻转游戏是在一个 4 格×4 格的长方形上进行的,在长方形的 16 个格上每 个格子都放着一个双面的物件.每个物件的两个面,一面是白色,另一面是黑色, 每个物件要么 ...

  3. 题解 P1047 【校门外的树】

    可以直接模拟,用珂朵莉树是不有点小题大做. 你怎么做珂朵莉都会骂你:"这么简单的模拟都要用***" 附赠珂朵莉照片一张 另外讲几点: 可以用int,你要不怕MLE #include ...

  4. python基础-网络编程part01

    软件开发架构 C/S(Client / Server) 架构 概念:是一种软件系统体系结构.Client是客户端,Server是服务端.客户端需要安装专用的客户端软件. 比如:微信.QQ.王者荣耀等应 ...

  5. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(4)- OTP及其烧写方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的OTP. 在i.MXRTxxx启动系列第二篇文章 Boot配置(ISP Pin, OTP) 里痞子 ...

  6. php实现微信拼手气红包

    $result = sendHB(3, 5); echo '<pre>'; var_export($result); echo array_sum($result); /** * 拼手气红 ...

  7. vue使用tips

    1. native修饰符可以用来绑定原生事件 2. destroyed在列表重渲染时,销毁的列表项会调用. 3. 并不是所有的数据都适合放入vuex 4. 子组件mounted先于父组件发生. 5. ...

  8. js2——定时跳转

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. Python开发还在用virtualenv?不如了解下pipenv...#华为云·寻找黑马程序员#

    又见 Kenneth Reitz 之前公众号写了一篇文章爬虫新宠requests_html 带你甄别2019虚假大学,其中主要是为了介绍模块**requests_html,这个模块的作者还开发了req ...

  10. Python使用psutil模块,做你的电脑管家

    电脑管家 也许大家都有这样的感觉,优化完美的电脑系统,你把电脑借给一个电脑小白使用上几天,等你拿回来的时候会发现,开机各种慢,乱七八糟的软件装了一大堆.那么我们如何使用Python来获取电脑的相关数据 ...