1、  新建一个Windows Service的方法:

1. 打开Visual Studio 2008新建一个project Solution;

2. 选择Windows->windows Service,修改服务名称:MyFirstService;

3. 在默认窗口Service1中右键Add Install,自动生成两个类。

  

4. 修改serviceInstaller1的属性:

   a)ServiceName =”FirstService”;   //设置服务名称

   b)StartType = Automatic;      //启动的模式有三种:“自动”、“手动”、“禁用”。事实上,在“我的电脑”的“管理”->“服务”中,还有一种模式:“自动(延迟启动)”

   c)Modifiers=public;

还有一些属性,比如DisplayName对应下图中的“显示名称”,ServiceName对应下图中的“服务名称”,而(Name)则对应,这些属性都是可以进行相应的修改的

  

5. 设置serviceProcessInstaller1组件的属性

  1) Account = LocalSystem;  //为最大的权限此属性还包括:LocalService、networkService、User(默认状态,如果使用User,则在安装的时候需要提供用户名和密码),如需要详细了解该属性,可以参照:

http://technet.microsoft.com/zh-cn/system.serviceprocess.serviceprocessinstaller.account(VS.90).aspx

  2) Modifiers=public;

6. 生成解决方案:选择release模式右键生成解决方案,则在相应的路径当中就会出现MyFirstService.exe文件。

7.使用installutil安装新建好的MyFirstService,方法如下:

  一、打开Visual Studio 2008-> Visual Studio Tools-> Visual Studio 2008 Command Prompt。

  二、使用命令:installutil  (服务的绝对路径),点击运行,即可安装服务。

以下有几个需要注意的问题:

第一:上述二的“服务绝对路径”犹如:e:\新建文件夹\test\MyFirstService \MyFirstService\bin\release\MyFirstService.exe,在这个地方需要注意的是:必须选择release下生 成solution。默认是在debug下生成solution。

第二:针对window7用户,在安装的过程中容易出现的几个错误:

  • 使用的电脑不是使用系统管理员的账号登录,则会出现下面的错误。(我已经做过测试),特别是在使用window7的用户特别需要注意,系统默认system账号是“禁用”模式。

  

  • 第二种错误的可能就是服务已经存在,则会出现下面的错误

  

为了避免这种错误的发生,我们应该在安装服务的时候首先进行第三步(即如果可以的话,首先卸载已存在的服务)。

第三:用命令:installutil  /u  (服务的绝对路径),点击运行,即可卸载服务。类似地,“服务的绝对路径”犹如:

e:\新建文件夹\test\MyFirstService\MyFirstService\bin\release\MyFirstService.exe。

  在卸载一个服务的时候可能会出现以下两种情况:

  • 正常情况:服务存在,而且已经启动,运行卸载,效果如下图:

  

当然,如果服务存在,但未启动,则在卸载的时候不会出现“试图停止服务”这个命令。

  • 异常情况:服务不存在,或者二次卸载,则会出现以下情况:

  

2、  installutil.exe的介绍。(这一项在网上会有很多介绍,在这里只是做了一些简单的综述)

  如要详细理解installutil的使用,可参照网址:http://msdn.microsoft.com/en-us/library/50614e95(vs.71).aspx

当然,installutil事实上可以用于安装有.NET开发的所有应用安装程序。当我们在Visual Studio 2008 Command Prompt中输入命令:installutil /h的时候,会打开installutil的所有帮助文档,如下:

  

  第一个为默认情况下为安装程序所在的绝对路径和安装文件名,类似前面所提到的。而/LogFile则是说明如果在安装的过程中,需要输出相应的安装日志的时候给定的日志文件的路径和日志文件名。当然我们最主要的是“安装”和“卸载”命令。

Notes:

1. 以管理员权限打开VS,通过提升权限,可以解决注册服务的时候Security exception的问题。

2. 可以在项目的PostBulid里面添加下列2行用于自动注册服务(编译后即可)

先删除服务:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u $(TargetPath)
再添加服务:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe $(TargetPath)

InstallUtil在windows服务中的使用(转)+ 服务安装的注意事项的更多相关文章

  1. 如何删除WINDOWS中服务中不再使用的服务?

    右键选择那个不需要的服务,点击属性,看到"服务名",拷贝下来 然后通过管理员的方式进入到控制台,输入 sc delete "你刚才拷贝的服务名" ,就行了,注意 ...

  2. 宿主在Windows Service中的WCF(创建,安装,调用) (host到exe,非IIS)

    1. 创建WCF服务 在vs2010中创建WCF服务应用程序,会自动生成一个接口和一个实现类:(IService1和Service1) IService1接口如下:   using System.Ru ...

  3. QC学习一:Windows环境中Quality Center 9.0安装详解

    一.安装前准备 1.安装环境:windows XP.SQL Server2005 2.准备安装文件:Quality Center 9.0 (qc10以上,包括qc10,qc只支持安装在服务器操作系统上 ...

  4. Windows 下 exe 服务注册到 service 服务中

    window 下注册 exe 程序.添加到 服务中. window 注册服务方式 一. regsvr 方式 直接在 程序目录执行: Regsvr 32 命令是Windows中控件文件 ( 如扩展名为D ...

  5. Windows平台下在服务中添加MySQL

    widows下查看服务 1.桌面计算机-->右键-->管理-->计算机管理(本地)--->服务和应用程序-->服务 2.运行 中输入 services.msc 在服务中添 ...

  6. 如何在Windows Server 2008服务器中把Tomcat启动程序添加到服务中

    转自:https://blog.51cto.com/zdytesting/2314093 tomcat所在的bin目录: 添加服务: service install service_name 移除服务 ...

  7. .Net Core 项目在Windows服务中托管【转载】

    本文以创建的WebAPI项目为例子进行讲解(本人使用VS Code创建的项目) 1.使用VS Code创建WebAPI项目(项目名称自定义) 2.在创建的项目csproj项目文件中,确认是否存在运行时 ...

  8. Windows 64位环境的Java 服务配置

    有个任务,需要远程起调Windows64服务器下的程序,那么需要在Windows服务器中注入一个deamon服务,都知道Linux环境做成后台服务非常简单,nohup &很快能解决问题,但wi ...

  9. Windows系统中Oracle11g R2 版本数据库卸载

    1. 停止"服务"中所有的ORCLE服务. 进入服务的方法很多,如: (1)在运行中输入services.msc,然后找到所有跟oracle 有关的服务. (2)开始->设置 ...

  10. WSL2:在Windows系统中开发Linux程序的又一神器

    作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...

随机推荐

  1. MSSQL数据库链接字符串Asynchronous Processing=true不是异步查询吗,怎么是缓存

    ;Asynchronous Processing=true  不是异步查询吗,怎么是缓存 <!--<add name="default" providerName=&q ...

  2. createStatement()的用法

    createStatement()的用法 标签: 数据库concurrencyscrollsql 2012-02-24 19:58 2508人阅读 评论(0) 收藏 举报  分类: JavaEE服务器 ...

  3. git diff

    git diff  工作区与暂存区的差别 git diff -cached / git diff -staged  暂存区与版本库的差别 git diff HEAD  工作区与版本库的差别 git d ...

  4. line-height:150%和 line-height:1.5 的区别

    父元素line-height为150%或1.5em时,依据父元素的字体大小计算出行高值让子元素继承父元素line-height为1.5时,依据子元素字体大小计算其行高值.

  5. Cucumber

    http://www.ibm.com/developerworks/library/a-automating-ria/ Cucumber is a testing framework that hel ...

  6. C# 正则匹配domain

    1.带协议表达式 var pattern = @"[(?<=http://)|(?<=https://)]+[\w\.]+[^/?#]"; 2.不带协议表达式 var ...

  7. 【转】apache kafka监控系列-KafkaOffsetMonitor

    apache kafka监控系列-KafkaOffsetMonitor 时间 2014-05-27 18:15:01  CSDN博客 原文  http://blog.csdn.net/lizhitao ...

  8. Linux下的特殊权限SetUID

    1.SetUID的功能 只有可以执行的二进制程序才能设置SUID权限 命令执行者要对改程序拥有x执行权限 命令执行者在执行改程序的时候获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属性) ...

  9. 系统研究Airbnb开源项目airflow

    开源项目airflow的一点研究 调研了一些几个调度系统, airflow 更满意一些. 花了些时间写了这个博文, 这应该是国内技术圈中最早系统性研究airflow的文章了.  转载请注明出处 htt ...

  10. runtime(面试)

    运行时机制,runtime库里面包含了跟类.成员变量.方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等 需要导入<objc/me ...