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. apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法

      <Directory "要去掉PHP执行权限的目录路径,例如:D:/piaoyun.cc/upload"> ErrorDocument 404 /404/404.h ...

  2. Sphinx中文分词安装配置及API调用

    这几天项目中需要重新做一个关于商品的全文搜索功能,于是想到了用Sphinx,因为需要中文分词,所以选择了Sphinx for chinese,当然你也可以选择coreseek,建议这两个中选择一个,暂 ...

  3. JavaScript 中 的prototype和__proto__

    1.prototype是函数的一个属性(每个函数都有一个prototype属性),这个属性是一个指针,指向一个对象.它是显示修改对象的原型的属性. 2.__proto__是一个对象拥有的内置属性(请注 ...

  4. JavaScript基础整理(2)

    接下来的重点是函数.我们知道函数是特殊的对象. 函数作用域和声明提前.JavaScript中没有块级作用域,只有函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意 函数体内都要定义. func ...

  5. 整理的mysql优化内容

    1,当只要一行数据时使用 LIMIT 1如果明确只取一条数据,要加上limit 1; 2,避免 SELECT *,根据需要获取字段应该养成一个需要什么就取什么的好的习惯. 3,使用 ENUM 而不是 ...

  6. pip高级使用技巧以及搭建自己的pypi服务器

    =========================  pip 访问非官方pypi源, 以及代理的设置=========================在Windows下安装某些Python的C ext ...

  7. CSS hack 汇总

    1, IE条件注释法,微软官方推荐的hack方式. <!]> IE6以及IE6以上版本可识别 <![endif]--> <!]> 仅IE7可识别 <![end ...

  8. 关于360的META设置,强制使用极速模式

    我的网站,为了使360浏览器打开时默认为极速模式,给用户良好的体验!避免网页由于细节而导致页面布局错乱~ <!DOCTYPE HTML> <html> <head> ...

  9. [译]Mongoose指南 - Document

    更新 有几种方式更新document. 先看一下传统的更新方法 Tank.findById(id, function(err, tank){ if(err) return handleError(er ...

  10. <s:url>指向的Action只执行一次,清除浏览器缓存文件后又可执行一次。

    Action中的方法仅为静态变量赋值,而其他访问数据库的Action可以被重复执行. 起初判断可能是静态变量的内存机制导致不能重复执行. 然后发现清楚浏览器缓存文件后又可以执行一次了,看来原因在Jsp ...