VS 2012 创建 Windows Service 项目

  • 格式:docx
  • 大小:203.98 KB
  • 文档页数:10

VS 2012 创建Windows Service 项目1.Windows Service 简介Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的Windows 会话中可长时间运行的可执行应用程序。

这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。

这些功能使服务非常适合在服务器上使用,每当需要使用不会影响在同一台计算机上工作的其他用户的功能时也适用。

还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。

1.1.查看系统的 Service打开 cmd.exe,敲入命令services.msc打开Service 管理界面。

可以看到如下所示的一个列表。

1. Name: 代表了 Service 的名字2. Description:service 的简单介绍3.Status: 运行状态,这个比较重要,有的是很多程序比如IIS 的某些功能不能正常运行,需要查看他所依赖的 Service 的 Status 是不是 Running 的4.Start Type: Service 的启动方式,Manual 手动即有人为手工启动或者有程序调用该 Service 时,Service 才会启动。

Automatic: 自动,随系统启动而启动,通常适用于比较重要的Service。

Automatic (Delay Start): Win7 中加入的新功能,采用此种启动方式,Service 会在系统启动一段时间后才启动,可以解决系统开机因为加载服务过多而引起的时间过长,响应慢的问题。

Disabled: 禁止使用改服务,小心使用该选项,除非你确认该服务不会被调用,或者没有任何其他服务依赖于该服务。

选中一个 Service, 右击弹出菜单,进行更多操作。

其他的操作这里不再赘述,着重讲一下 Properties 也就是属性的设置。

单击 Properties, 弹出对话框,选择 General 框进行基本的主要的设置。

选择LogOn 选项卡设置该用户的运行用户,这个比较重要。

我相信很多做 IT 管理的,做产品的人们比较痛恨的一件事情就是权限管理。

选择Recovery 选项卡,设置 Service 当服务运行失败后的动作。

选择Dependencies 选项卡,查看服务的依赖服务,和依赖于该服务的服务,在启动/Start 一个服务失败时,可以通过查寻依赖的服务,并且确认所有依赖的服务都已经启动。

在停止(Stop) 或禁用一个服务时,所有依赖改服务的服务都将受到影响。

好了,关于 Windows Service 的东西就啰嗦这么多了!2.用 VS2012 创建一个新的 Windows Service项目1.File -> New Project -> Templates -> Windows -> Windows Service -> OK2.在弹出的界面上右击-〉Property 填写 Service Name, 再接着直接点击到代码视图。

这么做的理由我个人认为有如下几个:a.Service 通常用来处理不需要用户交互的任务,如果给 Service 添加用户交互,那么我建议使用 Win Form, WPF Form 应用程序来代替之b.微软为程序员们,写了很多的控件,并且一直吹捧自己的这种所见即所得的方式,好用但是也把程序员挡在代码之外。

使得程序员知其然而不知其所以然。

3.重命名类 Service1为TestWindowsService,此类继承自System.ServiceProcess.ServiceBase,使用 Refactor 功能来重命名,这样可以避免忘记修改 Main 方法而带来的错误。

4.在够着函数中为ServiceBase类的重要属性赋值,这些属性的解释如下:a.ServiceName: 重要必须设置,设置Service 的名字。

b.AutoLog: 默认值为true,设置 Service 是否在事件日志中报告“开始”、“停止”、“暂停”以及“继续”命令。

推荐设置为 true, 这样可以通过查询系统日志来获取调试的有用信息。

c.CanStop:指示服务启动后是否可以停止。

d.C anPauseAndContinue: 获取或设置一个值,该值指示服务是否可以处理从终端服务器会话接收到的会话更改事件e.点击链接/zh-cn/library/system.serviceprocess.servicebase.aspx查看更多属性设置publicTestWindowsService(){this.ServiceName = "TestWindowService";this.AutoLog = true;this.CanStop = true;this.CanPauseAndContinue = true;}5.必须重写OnStart, OnStop方法。

a.OnStart 方法在 Service 启动时调用,再改方法中填写你希望在服务启动时所作的任何处理。

推荐自己定义一个接口,里面有个方法叫做 StartService, 然后把你的处理所有代码放在另一个 Project 中,这样你可以很方便的写一个 Console程序来 Debug 你的业务处理,因为 Service 项目不支持 F5 调式,所以我们只能绕过它。

protected override void OnStart(string[] args){// Insert you start processing code hereFile.WriteAllText(@"C:\service.log", "Service started!");}2.重写OnStop方法,指定你在 Service 停止时所要做的事情,通常为释放资源,记录日志。

protected override void OnStop(){// Release all the resources// Log stop event}6.重写其它O nxxx 方法来对 Service 不同生命周期阶段做处理,如 OnPause,OnContinue 等。

但不是必须的。

更多方法查看MSDN:/zh-cn/library/system.serviceprocess.servicebase.aspx, 但是我还是推荐大家查看英文版的信息,把zh-cn 改成 en-us /en-us/library/system.serviceprocess.servicebase.aspx3.将安装程序添加到 Windows Service ProjectWindows Service 应用程序不能直接启动,必须进行部署,那么就需要添加一个安装程序将Serive进行安装。

a.双击Service 类,打开设计视图,选择空白区域,右击, 然后选择 Porperties, 为属性设置相应的值, Service Name 必须赋值且长度应小于80个字符b.双击Service 类,打开设计视图,选择空白区域,右击,然后选择 AddInstaller,你会发现自动为你生成了一个类名称为 Project Installer,且为你生成了两个组件 serviceProcessInsterall1 和 serviceInstaller1. ServiceProcessInstaller用来设置运行服务的安全上下文,具体信息参见如何:为服务指定安全上下文。

为了方便起见,设置serviceProcessInstaller 的Account 为 Local System, 当然你可以指定具体的User。

参见第一节的 Service property Log On 选项。

c.单击 serviceInstaller 组件,右键 Property 确认 ServiceName 是否和你在第一步中设置的一样。

d.设置 Service 的启动方式,选择StartType然后选择相应的选项,我们已经第一节中对此介绍过了。

4.部署和调试4.1.安装 Windows Servicei.打开Visual studio 2012 命令提示工具, 在 Win 7 以后的操作系统上,右击 Run as Administratorii.切换到项目所在目录 cd C:\xx\xx\iii.输入命令 installutil.exe yourproject.exe, 等待安装完成4.输入命令services.msc查看是否成功安装v.输入命令 installutil.exe /u yourproject.exe 来卸载 Windows Serviceb.调试 Windows 服务调试 Windows 服务应用程序时,服务与“Windows 服务管理器”进行交互。

“服务管理器”通过调用OnStart方法启动服务,然后花 30 秒时间等待OnStart方法返回。

如果在这段时间内方法没有返回,管理器将显示一个服务无法启动的错误。

如果在OnStart方法中放置一个断点并且在 30 秒内不通过该断点,则管理器不会启动服务。

因为调试 Service 的 OnStart 方法比较困难,所以推荐使用 VS 的单元测试功能来测试你写在 OnStart 方法中的逻辑。

新建一个方法功能与 OnStart 方法相同,然后建单元测试。

i.在 VS 2012 中点击 Debug -> Attach to Processii.从调试菜单中选择附加的进程iii.然后单击 Attach5.关于作者敬请关注:/singhuayang,发现更多分享。