创建Windows Service可分为以下几步:

1. 创建一个“Windows Service”项目

2. 设置服务的相关属性,以确定服务的名称及工作机制

属性 设置
ServiceName 服务名称。ServiceName 属性的值必须始终与安装程序类中记录的名称匹配。 如果更改此属性,则必须也更新安装程序类的 ServiceName 属性。
CanStop True 指示服务将接受停止运行的请求;false 指示禁止停止运行服务,而且“服务控制管理器”会禁用停止服务的菜单选项。
CanShutdown True 指示服务希望在运行该服务的计算机关闭时收到通知,以便能够调用 OnShutdown 过程。
CanPauseAndContinue True 指示服务将接受暂停或继续运行的请求;false 指示禁止服务暂停运行和继续运行,“服务控制管理器”会禁用相应的暂停或继续服务的菜单选项。
CanHandlePowerEvent True 指示服务可以处理有关计算机电源状态更改的通知;false 指示禁止服务得到有关这些更改的通知。
AutoLog True 表示在服务执行操作时将信息项写入应用程序的事件日志;false 表示禁用此功能。

3. 访问代码编辑器,并为 OnStart 和 OnStop 过程填写所需的处理。(这两个方法在服务中是必不可少的)

4. 重写其他所有要为其定义功能的方法。如OnShutdown、onContinue、OnPause、OnPowerEvent等方法。

5. 添加服务应用程序所必需的安装程序。

添加安装程序的方法如下:双击要为其添加安装组件的服务,打开其“设计”视图

然后单击设计器的背景以选择服务本身,而不是它的任何内容,设计器具有焦点时,右击然后单击“Add Installer”。

这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller,并且服务的属性值被复制到组件。

对于每个服务应用程序,在 ProjectInstaller 类中至少有两个安装组件:ServiceInstaller 组件为项目中的所有服务安装进程,ServiceProcessInstaller 组件是应用程序所包含的每项服务的安装程序。 

单击 ServiceInstaller 组件,验证 ServiceName 属性的值和服务本身的 ServiceName 属性的值是否相同。(注意:两者必须一致)

Description属性对应“服务控制管理器”中的“描述”

DisplayName属性对应“服务控制管理器”中的“名称”

StartType 属性确定如何启动服务,它有如下三个选项:

Manual 服务安装后,必须手动启动。
        Automatic 每次计算机重新启动时,服务都会自动启动。
        Disabled 服务无法启动。

单击 ServiceProcessInstaller 组件并设置Account 属性属性值,可以确定将要运行服务的安全上下文。

默认情况下,服务与已登录的用户在不同的安全上下文中运行。 服务在称为 LocalSystem 的默认系统帐户的上下文中运行,该帐户给服务提供的系统资源访问特权不同于给用户提供的。 可以更改此行为,指定一个不同的用户帐户来运行服务。可以通过操作运行服务的进程的Account 属性来设置安全上下文。 这一属性允许您将服务设置为以下 4 种 Account 类型之一:

  • User ,当服务已安装并且在由网络上的单一用户指定的帐户的上下文中运行时,该类型将使系统要求提供有效的用户名和密码;

  • LocalService ,该类型在用作本地计算机上的非特权用户并向任意远程服务器显示匿名凭据的帐户的上下文中运行;

  • LocalSystem ,该类型在提供多种本地特权并向任意远程服务器显示计算机凭据的帐户的上下文中运行;

  • NetworkService ,该类型在用作本地计算机上的非特权用户并向任意远程服务器显示计算机凭据的帐户的上下文中运行。

6. 通过从“生成”菜单中选择“生成解决方案”来生成项目。

7. 安装服务。与在 Visual Studio 中创建的大多数项目不同,Windows 服务项目不能通过按 F5 从开发环境直接运行。 这是因为必须安装项目中的服务后,项目才能运行。

安装服务和卸载服务有两种方式:

手动安装服务

1. 在运行中输入“CMD”打开命令行,然后进入到编译好的服务所在目录

2.  在命令行中输入下列代码:installutil yourproject.exe

注意:如果输入命令后,提示installutil不是内部命令,可以找到installutil.exe所在目录,然后将其路径配置到环境变量中。一般.net framework4中,installutil.exe所在目录如下:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

如果不想配置环境变量,还有个变通的方法,将installutil.exe拷贝到编译好的服务所在目录,然后通过命令行安装。

手动卸载服务的步骤跟安装的步骤一样,只是命令中多了个参数: installutil /u yourproject.exe

通过批处理脚本安装卸载服务

打开记事本,键入相应命令,将其保存为bat格式即可

安装脚本:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe yourproject.exe
Pause

卸载脚本

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u yourproject.exe
Pause

如何创建WindowsService的更多相关文章

  1. VS2010 创建WindowsService服务

    1.新建一个Windows 服务 2.添加Installer 这一步很重要,在处理完你的业务逻辑后需要添加一个Installer才能是你的Windows服务被安装. 在VS中添加Installer 右 ...

  2. Quartz.Net系列(十一):System.Timers.Timer+WindowsService实现定时任务

    1.创建WindowsService项目 2.配置项目 3.AddInstaller(添加安装程序) 4.修改ServiceName(服务名称).StartType(启动类型).Description ...

  3. 本地计算机上的XXX服务启动后停止,某些服务在未由其它服务或程序使用时将自动停止

    创建WindowsService,以及安装和卸载网上的资料一搜一大堆,在这里就不再做演示,只说明下博主在工作中使用WindowsService服务出现的错误,以及最终的结局方案. 1.启动window ...

  4. C#系统服务安装

    转载 http://blog.csdn.net/vvhesj/article/details/8349615 1.1创建WindowsService项目 导入需要的引用比如System.configu ...

  5. HttpListener通讯成功案例

    1.创建WindowsService,如下代码 using System;using System.Net;using System.Net.Sockets;using System.ServiceP ...

  6. 关于windows-server-下MySQL Community版本的的安装与配置

    在公司电脑或者服务器上安装软件,都是有要求的,要么购买license-(这个需要申请,难度较大),要么安装免费开源的软件 笔者最近想要安装mysql服务环境,用于数据存储及开发一些功能程序需要连接数据 ...

  7. WindowsService 创建.安装.部署

    windows服务的用法很适合用于一些长期跑的项目..不需要人工操作..不需要服务器一直登陆..很方便.. 不说废话..直接开整.. 启动VS2012..创建Windows服务项目.. 确定..创建成 ...

  8. windows Service 创建部署

    Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序.Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就 ...

  9. C# 创建Windows Service

    当我们需要一个程序长期运行,但是不需要界面显示时可以考虑使用Windows Service来实现.这篇博客将简单介绍一下如何创建一个Windows Service,安装/卸载Windows Servi ...

随机推荐

  1. xshell配置

    字体:DejaVu Sans Mono 或者 Consolas 11号

  2. webpack 学习笔记 03 Code Splitting

    Introduction 对于较大的web 应用来说,将所有的代码文件压缩成一个文件是不合适的,在部分代码文件只有特殊情况下才被需要的情况下,这无疑是一种浪费.webpack 提供了讲代码文件分块的能 ...

  3. 【Jpa hibernate】一对多@OneToMany,多对一@ManyToOne的使用

    项目中使用实体之间存在一对多@OneToMany,多对一@ManyToOne的映射关系,怎么设置呢? GitHub地址:https://github.com/AngelSXD/myagenorderd ...

  4. 最新最全的 Android 开源项目合集

    原文链接:https://github.com/opendigg/awesome-github-android-ui 在 Github 上做了一个很新的 Android 开发相关开源项目汇总,涉及到 ...

  5. HDU3572Task Schedule(最大流 ISAP比較快)建图方法不错

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  6. UVA 12338 - Anti-Rhyme Pairs(后缀数组+RMQ)

    UVA 12338 - Anti-Rhyme Pairs 题目链接 题意:给定一些字符串,每次询问求出两个字符串的最长公共前缀的长度 思路:把字符串排序,就能求出height和rank数组,然后利用R ...

  7. 什么是猴子补丁(monkey patch)

    monkey patch指的是在执行时动态替换,通常是在startup的时候. 用过gevent就会知道,会在最开头的地方gevent.monkey.patch_all();把标准库中的thread/ ...

  8. D3.js 制作中国地图 .net 公共基础类

    D3.js 制作中国地图 from:  http://d3.decembercafe.org/pages/map/index.html GeoJSON is a format for encoding ...

  9. mdadm

    http://en.wikipedia.org/wiki/Mdadm mdadm From Wikipedia, the free encyclopedia     mdadm Original au ...

  10. Flash制作和软件使用

    Flash制作和软件使用 2014-11-09 ——君子善假于物也 引子 虽说FLASH在随着HTML5的发展而受阻,尤其移动终端都不再支持它了,但是在一段时间内还是重要的.近期朋友说要结婚,想弄个电 ...