当前位置: 首页 > news >正文

学校网站模板设计家装修效果图大全

学校网站模板设计,家装修效果图大全,做网站空间百度云和阿里云区别,seo专员是什么用Visual C#创建Windows服务程序一#xff0e;Windows服务介绍#xff1a;Windows服务以前被称作NT服务#xff0c;是一些运行在Windows NT、Windows 2000和Windows XP等操作系统下用户环境以外的程序。在以前#xff0c;编写Windows服务程序需要程序员很强的C或C功底。然而… 用Visual C#创建Windows服务程序 一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和文件系统服务等功能。   图1   二创建Windows服务程序 在介绍如何创建Windows服务程序以前我先向大家介绍一下.Net框架下与Windows服务相关的命名空间和其中的类库。.Net框架大大地简化了Windows服务程序的创建和控制过程这要归功于其命名空间中的功能强大的类库。和Windows服务程序相关的命名空间涉及到以下两个System.ServiceProcess和System.Diagnostics。 要创建一个最基本的Windows服务程序我们只需要运用.Net框架下的System.ServiceProcess命名空间以及其中的四个类ServiceBase、ServiceInstaller、ServiceProcessInstaller以及ServiceController其体系结构可见图2。   图2   其中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); } static void Main()   三添加文件监视服务   了解了Windows服务的基本体系结构和创建方法后我们就可以试着往服务中添加一些实际的功能了。下面我将向大家介绍一个能监视本地文件系统的文件监视服务FileMonitorService。该服务能根据预先设定的本地目录路径监视其中的文件包括子文件夹中的任何变化文件创建、文件删除、文件改名、文件修改。同时该服务还为每种变化创建了一个相对应的计数器计数器的作用就是反映该种变化的频度。   首先我们打开Visual Studio.Net新建一个Visual C#的Windows服务的项目如图3所示   图3   在重载Windows服务的OnStart函数之前我们先给其类添加一些计数器对象这些计数器分别对应了文件的创建、删除、改名以及修改等变化。一旦指定目录中的文件发生以上的某种变化与其相对应的计数器就会自动加1。所有的这些计数器都是定义为PerformanceCounter类型的变量的该类是包含在System.Diagnostics命名空间中的。 private System.Diagnostics.PerformanceCounter fileCreateCounter; private System.Diagnostics.PerformanceCounter fileDeleteCounter; private System.Diagnostics.PerformanceCounter fileRenameCounter; private System.Diagnostics.PerformanceCounter fileChangeCounter;   之后我们便在类的InitializeComponent方法中创建以上定义的各个计数器对象并确定其相关属性。同时我们将该Windows服务的名称设置为“FileMonitorService”设定其即是允许暂停并恢复的又是允许停止的。 private void InitializeComponent()               {                      this.components new System.ComponentModel.Container();                      this.fileChangeCounter new System.Diagnostics.PerformanceCounter();                      this.fileDeleteCounter new System.Diagnostics.PerformanceCounter();                      this.fileRenameCounter new System.Diagnostics.PerformanceCounter();                      this.fileCreateCounter new System.Diagnostics.PerformanceCounter();                        fileChangeCounter.CategoryName File Monitor Service;                      fileDeleteCounter.CategoryName File Monitor Service;                      fileRenameCounter.CategoryName File Monitor Service;                      fileCreateCounter.CategoryName File Monitor Service;                        fileChangeCounter.CounterName Files Changed;                      fileDeleteCounter.CounterName Files Deleted;                      fileRenameCounter.CounterName Files Renamed;                      fileCreateCounter.CounterName Files Created;                        this.ServiceName FileMonitorService;                      this.CanPauseAndContinue true;                      this.CanStop true;                      servicePaused false;               }   接着就是重载OnStart函数和OnStop函数OnStart函数完成了一些必要的初始化工作。在.Net框架下文件的监视功能可以由FileSystemWatcher类来完成该类是包含在System.IO命名空间下的。该Windows服务所要完成的功能包括了监视文件的创建、删除、改名和修改等变化而FileSystemWatcher类包含所有了对应于这些变化的处理函数。 protected override void OnStart(string[] args)               {                          FileSystemWatcher curWatcher new FileSystemWatcher();                        curWatcher.BeginInit();                      curWatcher.IncludeSubdirectories true;                      curWatcher.Path              System.Configuration.ConfigurationSettings.AppSettings                [FileMonitorDirectory];                      curWatcher.Changed new FileSystemEventHandler(OnFileChanged);                      curWatcher.Created new FileSystemEventHandler(OnFileCreated);                      curWatcher.Deleted new FileSystemEventHandler(OnFileDeleted);                      curWatcher.Renamed new RenamedEventHandler(OnFileRenamed);                      curWatcher.EnableRaisingEvents true;                      curWatcher.EndInit();               }   注意其中被监视的目录是存放在一个应用程序配置文件中的该文件是一个XML类型的文件。这种做法的好处就是我们不必重新编译并发布该Windows服务而只要直接修改其配置文件就可以达到更改所要监视的目录的功能了。   当该Windows服务启动后一旦被监视的目录中的文件发生某种变化与其相对应的计数器的值便会相应的增加方法很简单只要调用计数器对象的IncrementBy即可。 private void OnFileChanged(Object source, FileSystemEventArgs e)               {                      if( servicePaused false )                      {                             fileChangeCounter.IncrementBy(1);                      }               }                 private void OnFileRenamed(Object source, RenamedEventArgs e)               {                      if( servicePaused false )                      {                             fileRenameCounter.IncrementBy(1);                      }               }                 private void OnFileCreated(Object source, FileSystemEventArgs e)               {                      if( servicePaused false )                      {                             fileCreateCounter.IncrementBy(1);                      }               }                 private void OnFileDeleted(Object source, FileSystemEventArgs e)               {                      if( servicePaused false )                      {                             fileDeleteCounter.IncrementBy(1);                      }               }   OnStop函数即是停止Windows服务的在该Windows服务中服务一旦停止所有的计数器的值都应归零但是计数器并不提供一个Reset方法所以我们只好将计数器中的值减去当前值来达到这个目的。 protected override void OnStop()               {                      if( fileChangeCounter.RawValue ! 0 )                      {                             fileChangeCounter.IncrementBy(-fileChangeCounter.RawValue);                      }                      if( fileDeleteCounter.RawValue ! 0 )                      {                             fileDeleteCounter.IncrementBy(-fileDeleteCounter.RawValue);                      }                      if( fileRenameCounter.RawValue ! 0 )                      {                             fileRenameCounter.IncrementBy(-fileRenameCounter.RawValue);                           }                      if( fileCreateCounter.RawValue ! 0 )                      {                             fileCreateCounter.IncrementBy(-fileCreateCounter.RawValue);                      }               }   同时因为我们的Windows服务是允许暂停并恢复的所以我们还得重载OnPause函数和OnContinue函数方法很简单只要设定前面定义的布尔值servicePaused即可。 protected override void OnPause()               {                      servicePaused true;               }                protected override void OnContinue()               {                      servicePaused false;              }   这样该Windows服务的主体部分已经完成了不过它并不有用我们还必须为其添加安装文件。安装文件为Windows服务的正确安装做好了工作它包括了一个Windows服务的安装类该类是重System.Configuration.Install.Installer继承过来的。安装类中包括了Windows服务运行所需的帐号信息用户名、密码信息以及Windows服务的名称启动方式等信息。 [RunInstaller(true)]        public class Installer1 : System.Configuration.Install.Installer        {               /// summary               /// 必需的设计器变量。               /// /summary               private System.ComponentModel.Container components null;               private System.ServiceProcess.ServiceProcessInstaller spInstaller;               private System.ServiceProcess.ServiceInstaller sInstaller;                 public Installer1()               {                      // 该调用是设计器所必需的。                      InitializeComponent();                       // TODO: 在 InitComponent 调用后添加任何初始化               }                 #region Component Designer generated code               /// summary               /// 设计器支持所需的方法 - 不要使用代码编辑器修改               /// 此方法的内容。               /// /summary              private void InitializeComponent()               {                      components new System.ComponentModel.Container();                        // 创建ServiceProcessInstaller对象和ServiceInstaller对象                      this.spInstaller               new System.ServiceProcess.ServiceProcessInstaller();                      this.sInstaller new System.ServiceProcess.ServiceInstaller();                        // 设定ServiceProcessInstaller对象的帐号、用户名和密码等信息                      this.spInstaller.Account               System.ServiceProcess.ServiceAccount.LocalSystem;                      this.spInstaller.Username null;                      this.spInstaller.Password null;                       // 设定服务名称                      this.sInstaller.ServiceName FileMonitorService;                       // 设定服务的启动方式                      this.sInstaller.StartType               System.ServiceProcess.ServiceStartMode.Automatic;                        this.Installers.AddRange(               new System.Configuration.Install.Installer[]                 {this.spInstaller, this.sInstaller });               }               #endregion        }   同样因为该Windows服务中运用到了计数器对象我们也要为其添加相应的安装文件安装文件的内容和作用与前面的类似。限于篇幅这里就不给出相应的代码了有兴趣的读者可以参考文后附带的源代码文件。   到此为止整个Windows服务已经构建完毕不过Windows服务程序和一般的应用程序不同它不能直接调试运行。如果你直接在IDE下试图调试运行之就会报出如图4所示提示。   图4   根据其中提示我们知道安装Windows服务需要用到一个名为InstallUtil.exe的命令行工具。而运用该工具安装Windows服务的方法是非常简单的安装该Windows服务的命令如下 installutil FileMonitorService.exe   而要卸载该Windows服务你只要输入如下的命令即可 installutil /u FileMonitorService.exe   Windows服务安装成功后它便会出现在服务控制管理器中如图5所示。   图5   这样该文件监视的Windows服务就完成了一旦我们对被监视的目录中的文件进行操作相应的计数器就会运作起到监视文件变化的作用。不过这个功能对于一般的用户而言没多大意义然而你可以在此基础上添加新的功能比如构建一个后台的文件处理系统一旦被监视的目录中的文件发生某种变化Windows服务便对其进行特定的操作而最终用户就不必去关心后台处理程序是如何实现的了。   四总结   本文向大家介绍了Windows服务的一些基本概念和构建一般的Windows服务所需的方法同时还向大家展示了一个具有文件监视功能的Windows服务程序。通过本文读者应该能体会到构建Windows服务并不是想象中的那么复杂这主要还得归功于.Net框架为我们所作的大量努力。同时希望大家能在本文给出的实例的基础上构建更加完善和更加强大的Windows服务程序。最后希望本文对大家能有不少帮助。 注源代码文件为Source.rar 转载于:https://blog.51cto.com/sunday/94314
http://www.zqtcl.cn/news/515902/

相关文章:

  • 泗阳住房建设局网站泉州网站建设工程
  • 陕西省住房城乡建设部门户网站做百度移动端网站软件
  • 濮阳公司建站怎么自己做网站app
  • 美辰网站建设个人网站如何做移动端
  • 郑州模板网站建设网页在线代理
  • 学生做网站的工作室网站建设项目表
  • .net网站开发教程百度贴吧微网站设计基本要求
  • 无锡网站建设哪家公司好咨询网站建设
  • 优秀的企业网站设计wordpress登陆后台总是跳转首页
  • 国外html5特效网站宁波江北区建设局网站
  • 购物网站哪个是正品商城网站模板下载
  • 网站名称 规则技术支持 石家庄网站建设
  • 专门做私人定制旅游的网站专做韩餐网站
  • 网站 续费wordpress首页调用指定分类
  • 2008系统怎么做网站免费设计软件下载
  • 做电音的软件的专业下载网站宁波俄语网站建设
  • 北?? 网站建设旅游手机网站开发
  • 乐清做网站的网站备案容易通过吗
  • 网站qq登录 开发一个小型网站开发成本
  • 湖北网络建设公司网站js跳转到别的网站
  • 郑州网站app开发的汽车网站 源码
  • 河南网站建设企业做网站多少钱西宁君博示范
  • 沈阳有做网站的吗青浦手机网站制作
  • 腾讯云免费建站建立一个网站英语
  • 沙漠风网站建设怎么样官方网站建设银行2010年存款利息
  • 360报危险网站微信代码小程序
  • 网站维护报价单国外 做励志视频的网站
  • 用源码做自己的网站公司网站建设哪家公司好
  • 网站运营做seohtml前端网站开发PPT
  • 上海网站定制设计图wordpress网站在线安装