




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c# 创建Windows服务( Installutil .exe方式加载 )一Windows服务介绍: Windows服务以前被称作NT服务,是一些运行在Windows NT、Windows 2000和Windows XP等操作系统下用户环境以外的程序。在以前,编写Windows服务程序需要程序员很强的C或C+功底。然而现在在Visual Studio.Net下,你可以运用C+或Visual C#或Visual Basic.Net很轻松的创建一个Windows服务程序。同样,你还可以运用其他任何与CLR相容的语言来创建Windows服务程序。本文就向大家 介绍如何运用Visual C#来一步一步创建一个文件监视的Windows服务程序,然后介绍如何安装、测试和调试该Windows服务程序。 在介绍如何创建Windows服务程序以前,我先向大家介绍一些有关Windows服务的背景知识。一个Windows服务程序是在Windows操作 系统下能完成特定功能的可执行的应用程序。Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就能开始运行了,它必须有特定的启 动方式。这些启动方式包括了自动启动和手动启动两种。对于自动启动的Windows服务程序,它们在Windows启动或是重启之后用户登录之前就开始执 行了。只要你将相应的Windows服务程序注册到服务控制管理器(Service Control Manager)中,并将其启动类别设为自动启动就行了。而对于手动启动的Windows服务程序,你可以通过命令行工具的NET START 命令来启动它,或是通过控制面板中管理工具下的服务一项来启动相应的Windows服务程序(见图1)。同样,一个Windows服务程序也不能像一般的 应用程序那样被终止。因为Windows服务程序一般是没有用户界面的,所以你也要通过命令行工具或是下面图中的工具来停止它,或是在系统关闭时使得 Windows服务程序自动停止。因为Windows服务程序没有用户界面,所以基于用户界面的API函数对其是没有多大的意义。为了能使一个 Windows服务程序能够正常并有效的在系统环境下工作,程序员必须实现一系列的方法来完成其服务功能。Windows服务程序的应用范围很广,典型的 Windows服务程序包含了硬件控制、应用程序监视、系统级应用、诊断、报告、Web和文件系统服务等功能。 二创建Windows服务程 序: 在介绍如何创建Windows服务程序以前,我先向大家介绍一下.Net框架下与Windows服务相关的命名空间和其中的类库。.Net 框架大大地简化了Windows服务程序的创建和控制过程,这要归功于其命名空间中的功能强大的类库。和Windows服务程序相关的命名空间涉及到以下 两个:System.ServiceProcess和System.Diagnostics。 要创建一个最基本的Windows服务程序,我们 只需要运用.Net框架下的System.ServiceProcess命名空间以及其中的四个类:ServiceBase、 ServiceInstaller、ServiceProcessInstaller以及ServiceController.其中 ServiceBase类定义了一些可被其子类重载的函数,通过这些重载的函数,服务控制管理器就可以控制该Windows服务程序了。这些函数包 括:OnStart()、OnStop()、OnPause()以及OnContinue()等四个。而且ServiceBase类的子类还可以重载 OnCustomCommand()函数来完成一些特定的操作。通过重载以上的一些函数,我们就完成了一个Windows服务程序的基本框架,这些函数的 重载方法如下:protected override void OnStart(string args)protected override void OnStop()protected override void OnPause()protected override void OnContinue()ServiceBase类还为我们提供了一些属性,而这些属性是 任何Widnows服务程序所必须的。其中的ServiceName属性指定了Windows服务的名称,通过该名称系统就可以调用Windows服务 了,同时其它应用程序也可以通过该名称来调用它的服务。而CanPauseAndContinue和CanStop属性顾名思义就是允许暂停并恢复和允许 停止的意思。 要使得一个Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点。在Windows 服务程序中,我们也是在Main()函数中完成这个操作的。首先我们在Main()函数中创建一个Windows服务的实例,该实例应该是 ServiceBase类的某个子类的对象,然后我们调用由基类ServiceBase类定义的一个Run()方法。然而Run()方法并不就开始了 Windows服务程序,我们必须通过前面提到的服务控制管理器调用特定的控制功能来完成Windows服务程序的启动,也就是要等到该对象的 OnStart()方法被调用时服务才真正开始运行。如果你想在一个Windows服务程序中同时启动多个服务,那么只要在Main()函数中定义多个 ServiceBae类的子类的实例对象就可以了,方法就是创建一个ServiceBase类的数组对象,使得其中的每个对象对应于某个我们已预先定义好 的服务。 System.ServiceProcess.ServiceBase MyServices;MyServices = new System.ServiceProcess.ServiceBase new Service1(), new Service2() ;System.ServiceProcess.ServiceBase.Run(MyServices); 三。示例(这个服务在启动和停止时,向一个文本文件中写入一些文字信息。)第一步:创建服务框架 要创建一个新的 Windows 服务,可以从Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名WindowsService,然后点击 确定。你可以看到,向导向工程文件中增加 WebService1.cs类:其中各属性的含意是: Autolog 是否自动写入系统的日志文件 CanHandlePowerEvent 服务时候接受电源事件 CanPauseAndContinue 服务是否接受暂停或继续运行的请求 CanShutdown 服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown 过程 CanStop 服务是否接受停止运行的请求 ServiceName 服务名第二步:向服务中 增加功能 在 .cs代码文件中我们可以看到,有两个被忽略的函数 OnStart和OnStop。 OnStart函数在启动服务时执 行,OnStop函数在停止服务时执行。在这里,当启动和停止服务时,向一个文本文件中写入一些文字信息,代码如下:view plaincopy to clipboardprint?1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.ComponentModel;4. usingSystem.Data;5. usingSystem.Diagnostics;6. usingSystem.Linq;7. usingSystem.ServiceProcess;8. usingSystem.Text;9. usingSystem.IO;10. 11. namespaceWindowsService12. 13. publicpartialclassService1:ServiceBase14. 15. publicService1()16. 17. InitializeComponent();18. 19. stringstrPath=d:Test.txt;20. protectedoverridevoidOnStart(stringargs)21. 22. FileStreamfs=newFileStream(strPath,FileMode.OpenOrCreate,FileAccess.Write);23. 24. StreamWriterm_streamWriter=newStreamWriter(fs);25. 26. m_streamWriter.BaseStream.Seek(0,SeekOrigin.End);27. 28. m_streamWriter.WriteLine(mcWindowsService:ServiceStarted+DateTime.Now.ToString()+n);29. 30. m_streamWriter.Flush();31. 32. m_streamWriter.Close();33. 34. fs.Close();35. 36. 37. 38. protectedoverridevoidOnStop()39. 40. FileStreamfs=newFileStream(strPath,FileMode.OpenOrCreate,FileAccess.Write);41. 42. StreamWriterm_streamWriter=newStreamWriter(fs);43. 44. m_streamWriter.BaseStream.Seek(0,SeekOrigin.End);45. 46. m_streamWriter.WriteLine(mcWindowsService:ServiceStopped+DateTime.Now.ToString()+n);47. 48. m_streamWriter.Flush();49. 50. m_streamWriter.Close();51. 52. fs.Close();53. 54. 55. 56. 第三步: 将安装程序添加到服务应用程序这样,该Windows服务的主体部分已经完成了,不过它 并不有用,我们还必须为其添加安装文件。安装文件为Windows服务的正确安装做好了工作,它包括了一个Windows服务的安装类,该类是重 System.Configuration.Install.Installer继承过来的。安装类中包括了Windows服务运行所需的帐号信息,用户 名、密码信息以及Windows服务的名称,启动方式等信息。 Visual Studio.NET 随附有安装组件,可用来安装与服务应用程序相关联的资源。安装组件在正在安装到的系统上注册一项单个的服务,并使服务控制管理器知道该服务的存在。要 正确安装服务,并不需要在安装程序中进行任何特殊编码。但是,如果需要向安装进程添加特殊功能,则可能偶尔需要修改安装程序的内容。 将安装程序添加到服务应用程序的步骤是:1:在解决方案中,访问要向其中添加安装组件的服务的Design视图。2:在属性窗口中,单 击添加安装程序这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller,并且服务的属性值被复制到组件。 3:若要确定如何启 动服务,请单击 ServiceInstaller 组件并将 StartType 属性设置为适当的值。 Manual 服务安装后,必须手动启动。 Automatic 每次计算机重新启动时,服务都会自动启动。 Disabled 服务无法启动。4:将serviceProcessInstaller类的Account属性改为 LocalSystem 这样,不论是以哪个用户登录的系统,服务总会启动view plaincopy to clipboardprint?1. namespaceWindowsService2. 3. partialclassInstaller14. 5. /6. /必需的设计器变量。7. /8. /9. privateSystem.ServiceProcess.ServiceProcessInstallerspInstaller;10. privateSystem.ServiceProcess.ServiceInstallersInstaller;11. privateSystem.ComponentModel.IContainercomponents=null;12. 13. /14. /清理所有正在使用的资源。15. /16. /paramname=disposing& gt;如果应释放托管资源,为true;否则为false。17. protectedoverridevoidDispose(booldisposing)18. 19. if(disposing&(components!=null)20. 21. components.Dispose();22. 23. base.Dispose(disposing);24. 25. 26. #region组件设计器生成的代码27. 28. /29. /设计器支持所需的方法-不要30. /使用代码编辑器修改此方法的内容。31. /32. privatevoidInitializeComponent()33. 34. 35. components=newSystem.ComponentModel.Container();36. 37. /创建ServiceProcessInstaller对象和ServiceInstaller对象38. this.spInstaller=newSystem.ServiceProcess.ServiceProcessInstaller();39. this.sInstaller=newSystem.ServiceProcess.ServiceInstaller();40. 41. /设定ServiceProcessInstaller对象的帐号、用户名和密码等信息42. this.spInstaller.Account=System.ServiceProcess.ServiceAccount.LocalSystem;43. this.spInstaller.Username=null;44. this.spInstaller.Password=null;45. 46. /设定服务名称47. this.sInstaller.ServiceName=WindowsService;48. 49. /设定服务的启动方式50. this.sInstaller.StartType=System.ServiceProcess.ServiceStartMode.Automatic;51
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年述廉述职报告
- 培训调查对象的知识要求课件
- 遗传转基因技术在新品种选育中的应用
- 口罩戴法课件
- 肺隔离症的影像表现
- 2025年度电商网站SEO优化与流量提升外包服务协议
- 口才日常知识培训课件
- 2025年新能源汽车融资租赁合同:绿色出行专项版
- 2025年度别墅豪华装修工程半包施工合同
- 2025年住宅租赁合同解除及租赁关系终止证明协议书
- 2025年发展对象考试题库附含答案
- 公司解散清算的法律意见书、债权处理法律意见书
- 中国石油天然气集团公司钻井液技术规范样本
- 电气专业求职个人简历模板5篇
- 创新基础(创新思维)PPT完整全套教学课件
- 02jrc901b电子海图操作jan中文说明书
- 田间道路工程施工图设计说明
- 井下管路安装、维护管理规定
- GB/T 7967-2002声学水声发射器的大功率特性和测量
- GB 38507-2020油墨中可挥发性有机化合物(VOCs)含量的限值
- GA/T 1162-2014法医生物检材的提取、保存、送检规范
评论
0/150
提交评论