使用Visual Studio 2015 Community 开发windows服务
昨天研究在.NET下开发Windows服务程序,期间遇到一些小问题,这里仅将自己的开发过程和需要注意的地方写下和广大网友分享……
1、基础
Windows服务是指系统启动时能够自己运行的程序。Windows服务可以在没有交互界面的情况下在后台进行业务的处理。
.NET下开发Windows服务需要几个基本的类,它们在程序集System.ServiceProcess.dll和System.Configuration.Install.dll中,分别是:ServiceBase、ServiceInstaller、ServiceProcessInstaller、Installer,这几个类是开发一个最简单的Windows服务所必须的。
2、使用Visual Studio 2015 Commnuity创建Windows服务项目
在Classic Desktop(经典桌面程序)中选择Windows Service项目。项目文件结构如下:

双击Service1.cs进入服务设计界面,设置ServiceName属性(该属性在下文中还会提及,请留意),该属性是系统控制Windows服务的标识:

这里我将ServiceName属性设置为Test,大家注意看属性面板的上边,发现这里设置的是ServiceBase类的属性。ServiceBase类是.NET中创建所有Windows服务的基类。在创建新的服务类时,必须从 ServiceBase 派生。
接下来我们看下Service1.cs文件的代码部分,可以看到里面有个Service1类继承自ServiceBase类,还有两个重写方法,OnStart和OnStop。OnStart中的代码将会在服务启动之后运行,OnStop中的代码在服务停止时运行。除此之外还有OnPause、OnContinue等方法。这是我们编译项目会在bin\Dubug文件夹下生成WindowsService1.exe文件,这个文件就是我们创建的Windows服务。是不是感觉很简单?但是如果你以为Windows服务的创建工作到此为止就结束了,那就错了。不信双击WindowsService1.exe运行试试……
3、Windows服务的安装
看到了吧,提示我们想要运行Windows服务要先安装该服务

提示信息中提到了installutil.exe,这里先不说它的用处。我们要想安装刚刚创建的Windows服务,首先要在项目中创建安装文件,如图:

双击刚刚创建的Installer1.cs文件会进入它的设计界面,这里且不管设计界面,我们直接进入代码界面,会看到里面有一个类:Installer1,它继承自
System.Configuration.Install命名空间下的Installer类,Installer 类是 .NET中所有自定义安装程序的基类。
首先我们在Installer1的构造函数中定义我们的服务进程安装类(即上文提到的ServiceProcessInstaller)实例和服务安装类(即上文提到的ServiceInstaller)实例
public Installer1()
{
InitializeComponent(); ServiceProcessInstaller spi = new ServiceProcessInstaller();
spi.Account = ServiceAccount.LocalSystem;//设置服务要运行在什么类型的账号下 //这里可以创建多个ServiceInstaller实例
ServiceInstaller si = new ServiceInstaller();
si.ServiceName = "Test";//系统操作服务的标识,要和ServiceBase中设置的ServiceName属性值相同
si.DisplayName = "测试服务";//展示给用户的服务名,即在控制面板中看到的服务名
si.Description = "服务的描述信息";
si.StartType = ServiceStartMode.Manual;//服务的启动方式,这里设置为手动 //最后记得把创建的实例添加到安装列表中
this.Installers.Add(si);
this.Installers.Add(spi);
}
到此,对于安装服务的基本信息已经填写完毕。接下来我们还需要重写基类Installer中的两个方法:
//注意必须重写Install和Uninstall方法,且在重写方法中必须调用基类对应的方法,否则在安装和卸载服务的过程中会出问题
//小编就是因为没有调用基类中的方法导致安装和卸载出现问题
//出此之外还有Commit、Rollback等方法
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
} public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
}

这里大家要注意一点,在Installer1类上使用了特性:RunInstaller(true),如果我们将特性的参数设为false,那么安装工具installutil将会忽略该类,我们在安装服务时就不会安装该类中指定的服务。
完成上述步骤之后,我们再次编译项目……
在上文中我们提到了installutil.exe工具,它是用来安装.NET编写的Windows服务的工具,它的路径是C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe。其中v4.0.30319是.NET的版本号,使用不同版本的.NET编写Windows服务要使用对应的installutil.exe来安装。
我们打开命令行或使用VS自带的命令行工具,这里我们使用VS自带的命令行工具:Developer Command Prompt for VS2015来进行安装工作。
打开命令行工具,输入:installutil.exe Windows服务程序的路径(这里小编涂去了和个人信息相关的部分)然后回车

如使用系统的命令行工具就需要先跳转到installutil.exe所在的路径或者在命令行中指明它的路径。
回车之后会发现,Windows服务开始安装了,在然后就会发现安装出现了问题……

对于这个问题的解决方式相当简单,就是以管理员身份运行命令行工具即可(小编却花费了很长的时间才悟出来这个道理)。
以管理员身份运行命令行,再次执行安装过程,我们可以看到安装过程分为:安装和提交两步。
安装完成之后,我们可以在控制面板的服务管理器中看到刚刚安装的服务:

安装完成之后我们来启动服务,这里使用命令行来启动,也可以在服务管理器中启动。

大家注意到没有?控制面板服务管理器中显示的服务名称是DisplayName属性指定的名称,而我们启动服务时要使用ServiceName属性指定的服务名,否则会提示我们服务名无效。
服务的停止使用命令:net stop 服务名称。
服务的卸载使用installutil /u 服务程序路径来完成。
至此,在.NET中开发一个简单的Windows服务的工作已经全部完成……
使用Visual Studio 2015 Community 开发windows服务的更多相关文章
- visual studio 2015 + Cordova 开发环境搭建
简单的写一些,备忘,太折腾了,特别是通过代理上网的我们国内的开发者 1.当然是安装Visual Studio 2015,别忘了选择Tools For Apache Cordova. 对于通过Proxy ...
- Visual Studio 2015 前端开发工作流
Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,之前的版本为:Visu ...
- Win10开发必备:Visual Studio 2015正式版下载
7月21日凌晨消息,面向大众用户的Visual Studio 2015集成开发工具正式版免费试用版已经推出.本文帮大家汇总一下简体中文社区版.专业版以及企业版在线安装版以及ISO离线安装镜像下载地址. ...
- Win10开发必备工具:Visual Studio 2015正式版下载
7月21日凌晨最新消息,面向大众用户的Visual Studio 2015集成开发工具正式版免费试用版已经推出.本文帮大家汇总一下简体中文社区版.专业版以及企业版在线安装版以及ISO离线安装镜像下载地 ...
- Visual Studio 2015官方汇总包括下载和视频
7月20日 23:30 Visual Studio 2015正式版正式发布,作为微软新一代开发利器,在全地球乃至全宇宙乃至全太阳系中最强大 且没有之一的IDE(上述描述来自微博用户评论)跨平台支持成 ...
- 如何正确并完全安装Visual Studio 2015企业版本?
http://blog.csdn.net/code_godfather/article/details/47381631 [简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 个人网站: ...
- Visual studio 2015 与 mysql 连接
Visual Studio 2015 Community连接到MySQL,步骤很简单,但刚弄的时候一脸. 这个学期开了一门课程,老师教的是visual studio 2010来开发.net的,但是我自 ...
- Windows 10和Visual Studio 2015 能给.Net方向的开发从业者带来什么?
.Net 多年前我们选择了你,现在在当前的移动互联网热火朝天的时代,你能给我们什么样的惊喜?面对IOS和android的势头,windows的移动端能否实现三国鼎立? windows 10 号称统一各 ...
- 体验Visual Studio 2015 Windows Forms应用程序开发与维护
昨天到半夜还没有等到Visual Studio 2015的下载地址,实在熬不住就先休息了.北美地区的时区比北京时间要晚一些,今天早上到公司就看到Visual Studio 2015的下载地址,迅速的将 ...
随机推荐
- WPF之命令浅谈
一.认识命令 1.1命令的特点 提到“命令”,我们应该想到命令的发出者,命令的接受者,命令的内容,准备工作,完成任务,回报工作...与事件中的发送者,接受者,消息,处理,处理,处理一一对应,如果是单纯 ...
- 使用NServiceBus开发分布式应用
系列主题:基于消息的软件架构模型演变 NServiceBus 是一个.Net平台下开源的消息服务框架,这类产品有时也被称作ESB(Enterprise Service Bus)--企业服务总线.NSe ...
- UML类图的6大关系
<小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...
- android服务里生成通知点击后返回正在运行的程序和当前的Activity
想在服务里生成一个通知,并且点击通知打开当前应用程序下单当前活动,折腾了半天,网上的那些都不靠谱,试了半天,最后把ActivityManager和反射都用进来了,终于解决了这个问题.这样在服务中想恢复 ...
- TODO:小程序集成WeUI
TODO:小程序集成WeUI WeUI 为微信 Web 服务量身设计.WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一. ...
- Java三大框架 介绍
三大框架:Struts+hibernate+spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...
- android studio上的基本动画实现(第一篇)
hello,各位小伙伴们,在很多小伙伴们刚刚开始学习android的时候,常常会有一些project里面需要有一些基本动画的插入,那么具体是要怎么实现呢?我们接下一起分析一下在android中的几种基 ...
- Linux中grep搜索用法
有测试文件test.txt一枚,内容如下 aaabbbcccAAADDDEEEabcsdfjasldjfbcdokmABC 一.基本搜索常用1.现在想把abc okm筛选出来 grep "a ...
- NuGet程序包安装SQLite后完全抽离出SQLite之入门介绍及注意事项,你真的懂了吗?
前言 近几天的几篇文章讲的内容非前面内容如系列的讲解,这几天文章都是我在项目中遇到的问题以及重新学习的知识,所以和大家分享一下,关于SQLite的文章多如牛毛,但是有些大多已经过时,为什么说过时,之前 ...
- 基于讯飞语音API应用开发之——离线词典构建
最近实习在做一个跟语音相关的项目,就在度娘上搜索了很多关于语音的API,顺藤摸瓜找到了科大讯飞,虽然度娘自家也有语音识别.语义理解这块,但感觉应该不是很好用,毕竟之前用过百度地图的API,有问题也找不 ...