zoukankan      html  css  js  c++  java
  • Windows服务安装包制作

    原文:http://www.cnblogs.com/greatandforever/archive/2008/10/14/1310504.html

    可能是太过于懒惰的原因,研究个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 服务的成果:

    下面是测试用到的Demo下载地址

  • 相关阅读:
    hdu5728 PowMod
    CF1156E Special Segments of Permutation
    CF1182E Product Oriented Recurrence
    CF1082E Increasing Frequency
    CF623B Array GCD
    CF1168B Good Triple
    CF1175E Minimal Segment Cover
    php 正则
    windows 下安装composer
    windows apache "The requested operation has failed" 启动失败
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1651134.html
Copyright © 2011-2022 走看看