Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。本文就向大家介绍如何运用Visual C#来一步一步创建一个文件监视的Windows服务程序,然后介绍如何安装、测试和调试该Windows服务程序。
创建好项目之后 --- >> 双击 Service1.cs ---- >> 出现一个设计界面 ---->> 右键界面 --- >> 弹出对话框选择添加安装程序
如图,添加完成后,
设置相应的属性,给serviceInstaller1设置属性,主要是描述信息。如图,
给serviceProcessInstaller1设置,主要是account。一般选localsystem,如图,
Service1.cs出现设计界面,双击设计界面进入cs代码页。可以重写这些方法。
1 protected override void OnStart(string[] args) 2 { 3 //服务开启执行代码 4 } 5 protected override void OnStop() 6 { 7 //服务结束执行代码 8 } 9 protected override void OnPause() 10 { 11 //服务暂停执行代码 12 base.OnPause(); 13 } 14 protected override void OnContinue() 15 { 16 //服务恢复执行代码 17 base.OnContinue(); 18 } 19 protected override void OnShutdown() 20 { 21 //系统即将关闭执行代码 22 base.OnShutdown(); 23 }
除此之外还有一个Program.cs文件:打开看下。
使得一个Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点。在Windows服务程序中,我们也是在Main()函数中完成这个操作的。首先我们在Main()函数中创建一个Windows服务的实例,该实例应该是ServiceBase类的某个子类的对象,然后我们调用由基类ServiceBase类定义的一个Run()方法。然而Run()方法并不就开始了Windows服务程序,我们必须通过前面提到的服务控制管理器调用特定的控制功能来完成Windows服务程序的启动,也就是要等到该对象的OnStart()方法被调用时服务才真正开始运行。如果你想在一个Windows服务程序中同时启动多个服务,那么只要在Main()函数中定义多个ServiceBae类的子类的实例对象就可以了,方法就是创建一个ServiceBase类的数组对象,使得其中的每个对象对应于某个我们已预先定义好的服务。
/// <summary> /// 应用程序的主入口点。 /// </summary> static void Main() { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1(), }; ServiceBase.Run(ServicesToRun); }
安装需要用,C:WINDOWSMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe 可以找到,注意.NET版本
安装服务命令: installutil.exe +文件绝对路径 .exe
卸载服务命令: installutil /u +文件绝对路径.exe
保证你的服务已安装成功,且处于启动模式。
点调试--->> 附加到进程
即可。
注意的是:
如果启动出错,可以查看系统日志
打开控制面板/管理工具/事件查看器 ->应用程序 里发现了如下信息:
双击错误信息,即可找到服务的错误提示!~!~
根据错误的提示信息,可检查代码。
学习于 https://blog.csdn.net/yysyangyangyangshan/article/details/10515035
http://www.cnblogs.com/knowledgesea/p/3616127.html
http://www.cnblogs.com/mytechblog/articles/1893370.html