国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C#Windows服務之添加文件監視服務

開發 后端
C#Windows服務中添加文件監視服務是如何實現的呢?C#Windows服務中添加文件監視服務需要注意什么呢?讓我們帶著這些問題看一下的文章。

C#Windows服務之添加文件監視服務:

了解了Windows服務的基本體系結構和創建方法后,我們就可以試著往服務中添加一些實際的功能了。下面我將向大家介紹一個能監視本地文件系統的文件監視服務-FileMonitorService。該服務能根據預先設定的本地目錄路徑監視其中的文件包括子文件夾中的任何變化:文件創建、文件刪除、文件改名、文件修改。同時,該服務還為每種變化創建了一個相對應的計數器,計數器的作用就是反映該種變化的頻度。

首先,我們打開Visual Studio.Net,新建一個Visual C#的Windows服務的項目,如圖所示:

新建C#的Windows服務的項目 

在重載Windows服務的OnStart()函數之前,我們先給其類添加一些計數器對象,這些計數器分別對應了文件的創建、刪除、改名以及修改等變化。一旦指定目錄中的文件發生以上的某種變化,與其相對應的計數器就會自動加1。所有的這些計數器都是定義為PerformanceCounter類型的變量的,該類是包含在System.Diagnostics命名空間中的。

  1. private System.Diagnostics.PerformanceCounter fileCreateCounter;  
  2.  
  3. private System.Diagnostics.PerformanceCounter fileDeleteCounter;  
  4.  
  5. private System.Diagnostics.PerformanceCounter fileRenameCounter;  
  6.  
  7. private System.Diagnostics.PerformanceCounter fileChangeCounter; 

之后我們便在類的InitializeComponent()方法中創建以上定義的各個計數器對象并確定其相關屬性。同時我們將該Windows服務的名稱設置為“FileMonitorService”,設定其即是允許暫停并恢復的又是允許停止的。

  1. private void InitializeComponent()  
  2.  
  3.  {  
  4.  
  5. this.components = new System.ComponentModel.Container();  
  6.  
  7. this.fileChangeCounter = new System.Diagnostics.PerformanceCounter();  
  8.  
  9. this.fileDeleteCounter = new System.Diagnostics.PerformanceCounter();  
  10.  
  11. this.fileRenameCounter = new System.Diagnostics.PerformanceCounter();  
  12.  
  13. this.fileCreateCounter = new System.Diagnostics.PerformanceCounter();  
  14.  
  15.  
  16. fileChangeCounter.CategoryName = "File Monitor Service";  
  17.  
  18. fileDeleteCounter.CategoryName = "File Monitor Service";  
  19.  
  20. fileRenameCounter.CategoryName = "File Monitor Service";  
  21.  
  22. fileCreateCounter.CategoryName = "File Monitor Service";  
  23.  
  24.    
  25.  
  26. fileChangeCounter.CounterName = "Files Changed";  
  27.  
  28. fileDeleteCounter.CounterName = "Files Deleted";  
  29.  
  30. fileRenameCounter.CounterName = "Files Renamed";  
  31.  
  32. fileCreateCounter.CounterName = "Files Created";  
  33.  
  34.  
  35. this.ServiceName = "FileMonitorService";  
  36.  
  37. this.CanPauseAndContinue = true;  
  38.  
  39. this.CanStop = true;  
  40.  
  41. servicePaused = false;  
  42.  
  43.  } 

接著就是重載OnStart()函數和OnStop()函數,OnStart()函數完成了一些必要的初始化工作。在.Net框架下,文件的監視功能可以由FileSystemWatcher類來完成,該類是包含在System.IO命名空間下的。該Windows服務所要完成的功能包括了監視文件的創建、刪除、改名和修改等變化,而FileSystemWatcher類包含所有了對應于這些變化的處理函數。

  1. protected override void OnStart(string[] args)  
  2.  
  3.  {       
  4.  
  5. FileSystemWatcher curWatcher = new FileSystemWatcher();  
  6.  
  7.  
  8. curWatcher.BeginInit();  
  9.  
  10. curWatcher.IncludeSubdirectories = true;  
  11.  
  12. curWatcher.Path =  
  13.  
  14. System.Configuration.ConfigurationSettings.AppSettings  
  15.  
  16. ["FileMonitorDirectory"];  
  17.  
  18. curWatcher.Changed += new FileSystemEventHandler(OnFileChanged);  
  19.  
  20. curWatcher.Created += new FileSystemEventHandler(OnFileCreated);  
  21.  
  22. curWatcher.Deleted += new FileSystemEventHandler(OnFileDeleted);  
  23.  
  24. curWatcher.Renamed += new RenamedEventHandler(OnFileRenamed);  
  25.  
  26. curWatcher.EnableRaisingEvents = true;  
  27.  
  28. curWatcher.EndInit();  
  29.  
  30.  } 

注意其中被監視的目錄是存放在一個應用程序配置文件中的,該文件是一個XML類型的文件。這種做法的好處就是我們不必重新編譯并發布該Windows服務而只要直接修改其配置文件就可以達到更改所要監視的目錄的功能了。

當該Windows服務啟動后,一旦被監視的目錄中的文件發生某種變化,與其相對應的計數器的值便會相應的增加,方法很簡單,只要調用計數器對象的IncrementBy()即可。

  1. private void OnFileChanged(Object source, FileSystemEventArgs e)  
  2.  
  3.  {  
  4.  
  5. if( servicePaused == false )  
  6.  
  7. {  
  8.  
  9.   fileChangeCounter.IncrementBy(1);  
  10.  
  11. }  
  12.  
  13.  }  
  14.  
  15.  private void OnFileRenamed(Object source, RenamedEventArgs e)  
  16.  
  17.  {  
  18.  
  19. if( servicePaused == false )  
  20.  
  21. {  
  22.  
  23.   fileRenameCounter.IncrementBy(1);  
  24.  
  25. }  
  26.  
  27.  }  
  28.  
  29.    
  30.  
  31.  private void OnFileCreated(Object source, FileSystemEventArgs e)  
  32.  
  33.  {  
  34.  
  35. if( servicePaused == false )  
  36.  
  37. {  
  38.  
  39.   fileCreateCounter.IncrementBy(1);  
  40.  
  41. }  
  42.  
  43.  }  
  44.  
  45.  private void OnFileDeleted(Object source, FileSystemEventArgs e)  
  46.  
  47.  {  
  48.  
  49. if( servicePaused == false )  
  50.  
  51. {  
  52.  
  53.   fileDeleteCounter.IncrementBy(1);  
  54.  
  55. }  
  56.  
  57.  } 

 

OnStop()函數即是停止Windows服務的,在該Windows服務中,服務一旦停止,所有的計數器的值都應歸零,但是計數器并不提供一個Reset()方法,所以我們只好將計數器中的值減去當前值來達到這個目的。

  1. protected override void OnStop()  
  2.  
  3.  {  
  4.  
  5. if( fileChangeCounter.RawValue != 0 )  
  6.  
  7. {  
  8.  
  9.   fileChangeCounter.IncrementBy(-fileChangeCounter.RawValue);  
  10.  
  11. }  
  12.  
  13. if( fileDeleteCounter.RawValue != 0 )  
  14.  
  15. {  
  16.  
  17.   fileDeleteCounter.IncrementBy(-fileDeleteCounter.RawValue);  
  18.  
  19. }  
  20.  
  21. if( fileRenameCounter.RawValue != 0 )  
  22.  
  23. {  
  24.  
  25.   fileRenameCounter.IncrementBy(-fileRenameCounter.RawValue);        
  26.  
  27. }  
  28.  
  29. if( fileCreateCounter.RawValue != 0 )  
  30.  
  31. {  
  32.  
  33.   fileCreateCounter.IncrementBy(-fileCreateCounter.RawValue);  
  34.  
  35. }  
  36.  
  37.  } 

C#Windows服務中添加文件監視服務需要注意的:因為我們的Windows服務是允許暫停并恢復的,所以我們還得重載OnPause()函數和OnContinue()函數,方法很簡單,只要設定前面定義的布爾值servicePaused即可。

  1. protected override void OnPause()  
  2.  
  3.  {  
  4.  
  5. servicePaused = true;  
  6.  
  7.  }  
  8.  
  9. protected override void OnContinue()  
  10.  
  11.  {  
  12.  
  13. servicePaused = false;  
  14.  

這樣,該Windows服務的主體部分已經完成了,不過它并不有用,我們還必須為其添加安裝文件監視。安裝文件為Windows服務的正確安裝做好了工作,它包括了一個Windows服務的安裝類,該類是重System.Configuration.Install.Installer繼承過來的。安裝類中包括了Windows服務運行所需的帳號信息,用戶名、密碼信息以及Windows服務的名稱,啟動方式等信息。

  1. [RunInstaller(true)]  
  2.  
  3. public class Installer1 : System.Configuration.Install.Installer  
  4.  
  5.  {  
  6.  
  7.  /// <summary>  
  8.  
  9.  /// 必需的設計器變量。  
  10.  
  11.  /// </summary>  
  12.  
  13.  private System.ComponentModel.Container components = null;  
  14.  
  15. private System.ServiceProcess.ServiceProcessInstaller spInstaller;  
  16.  
  17. private System.ServiceProcess.ServiceInstaller sInstaller;  
  18.  
  19.  public Installer1()  
  20.  
  21.  {  
  22.  
  23. // 該調用是設計器所必需的。  
  24.  
  25. InitializeComponent();  
  26.  
  27. // TODO: 在 InitComponent 調用后添加任何初始化  
  28.  
  29.  }  
  30.  
  31.  #region Component Designer generated code  
  32.  
  33.  /// <summary>  
  34.  
  35.  /// 設計器支持所需的方法 - 不要使用代碼編輯器修改  
  36.  
  37.  /// 此方法的內容。  
  38.  
  39.  /// </summary>  
  40.  
  41. private void InitializeComponent()  
  42.  
  43.  {  
  44.  
  45. components = new System.ComponentModel.Container();  
  46.  
  47. // 創建ServiceProcessInstaller對象和ServiceInstaller對象  
  48.  
  49. this.spInstaller =   
  50.  
  51. new System.ServiceProcess.ServiceProcessInstaller();  
  52.  
  53. this.sInstaller = new System.ServiceProcess.ServiceInstaller();  
  54.  
  55. // 設定ServiceProcessInstaller對象的帳號、用戶名和密碼等信息  
  56.  
  57. this.spInstaller.Account =   
  58.  
  59. System.ServiceProcess.ServiceAccount.LocalSystem;  
  60.  
  61. this.spInstaller.Username = null;  
  62.  
  63. this.spInstaller.Password = null;  
  64.  
  65.        // 設定服務名稱  
  66.  
  67. this.sInstaller.ServiceName = "FileMonitorService";  
  68.  
  69.    
  70.  
  71.        // 設定服務的啟動方式  
  72.  
  73. this.sInstaller.StartType =   
  74.  
  75. System.ServiceProcess.ServiceStartMode.Automatic;  
  76.  
  77.  
  78. this.Installers.AddRange(  
  79.  
  80. new System.Configuration.Install.Installer[]   
  81.  
  82. {this.spInstaller, this.sInstaller });  
  83.  
  84.  }  
  85.  
  86.  #endregion  
  87.  
  88.        } 

同樣,因為該Windows服務中運用到了計數器對象,我們也要為其添加相應的安裝文件,安裝文件的內容和作用與前面的類似。限于篇幅,這里就不給出相應的代碼了,有興趣的讀者可以參考文后附帶的源代碼文件。

到此為止,整個Windows服務已經構建完畢,不過Windows服務程序和一般的應用程序不同,它不能直接調試運行。如果你直接在IDE下試圖調試運行之,就會報出如圖所示提示。

Windows服務程序報出提示 

根據其中提示,我們知道安裝Windows服務需要用到一個名為InstallUtil.exe的命令行工具。而運用該工具安裝Windows服務的方法是非常簡單的,安裝該Windows服務的命令如下:

  1. installutil FileMonitorService.exe 

而要卸載該Windows服務,你只要輸入如下的命令即可:

  1. installutil /u FileMonitorService.exe 

Windows服務安裝成功后,它便會出現在服務控制管理器中,如圖所示。

Windows服務安裝成功 

這樣,該文件監視的C#Windows服務就完成了,一旦我們對被監視的目錄中的文件進行操作,相應的計數器就會運作,起到監視文件變化的作用。不過這個功能對于一般的用戶而言沒多大意義,然而你可以在此基礎上添加新的功能,比如構建一個后臺的文件處理系統,一旦被監視的目錄中的文件發生某種變化,Windows服務便對其進行特定的操作,而最終用戶就不必去關心后臺處理程序是如何實現的了。

C#Windows服務中添加文件監視服務的相關內容就向你介紹到這里,希望對你學習和了解C#Windows服務中添加文件監視服務有所幫助。

【編輯推薦】

  1. C#復制構造函數的實質淺析
  2. C#允許服務與桌面交互實現淺析
  3. C#windows服務中的Timer控件的使用
  4. C#Windows服務介紹
  5. C#創建Windows服務程序淺析
責任編輯:仲衡 來源: vchome.net
相關推薦

2009-08-14 13:41:13

C#Windows服務

2009-08-14 15:19:38

Windows服務程序Windows服務

2009-08-14 10:50:09

Windows服務介紹

2009-08-14 16:48:39

C#Windows服務

2009-08-14 14:25:09

Windows服務程序

2009-08-14 14:53:55

WINDOWS服務交互

2009-08-14 15:47:18

C#Windows服務

2009-08-14 15:06:08

Windows服務程序

2009-08-14 15:54:50

Windows服務程序C#Windows服務

2009-08-14 14:17:16

C#Windows服務

2009-08-14 16:13:25

C#windows服務

2009-08-14 16:24:00

Windows服務程序

2009-08-14 14:45:03

C#Windows服務

2009-08-14 17:55:52

C#Windows應用

2009-08-14 17:43:20

C#Windows應用

2009-08-14 10:42:16

Timer控件的使用C#windows服務

2009-08-14 17:27:30

C#Windows應用

2009-08-14 18:04:59

C#Windows應用

2009-08-14 17:51:32

C#Windows應用

2009-08-14 17:36:20

C#Windows應用
點贊
收藏

51CTO技術棧公眾號

欧美精品一区二区三区四区五区| 亚洲人成网站色ww在线| 国产精品无码一区二区在线| 韩国一区二区三区| 黑人中文字幕一区二区三区| 凹凸成人精品亚洲精品密奴| 欧美日韩高清区| 伊人久久噜噜噜躁狠狠躁| 91桃色在线| 欧美精品自拍偷拍| xvideos国产在线视频| 日韩电影大全免费观看2023年上| 日本一道高清亚洲日美韩| 久久99热这里只有精品国产| 神马影视一区二区| 国产一区自拍视频| 国产成人午夜高潮毛片| 视色视频在线观看| 色婷婷av一区二区| 日韩精品99| 日本一欧美一欧美一亚洲视频 | 91大学生片黄在线观看| 久久精品视频一区二区三区| 超碰在线公开超碰在线| 精品99一区二区三区| heyzo欧美激情| 国产福利久久| 国产乱淫av一区二区三区| 国产精品午夜久久久久久| 日韩视频在线永久播放| 97品白浆高清久久久久久| 高清免费日韩| 久久久久国产精品厨房| 在线观看黄色av| 欧美日本高清视频| 午夜亚洲性色福利视频| 污污的网站18| 欧美成人官网二区| 国产99亚洲| 成人在线视频一区二区三区| 婷婷国产在线综合| 97欧美成人| 国产精品theporn88| 中文字幕乱码亚洲精品一区| 深夜国产在线播放| 国产综合久久久久| www一区二区| 亚洲小说区图片区都市| 国产精品久久久| 成人亚洲一区二区一| 国产对白叫床清晰在线播放| 久久久久久久久久久网站| 麻豆国产精品视频| 你懂的在线视频| 韩国福利视频一区| 国产综合久久久久久鬼色| 美女毛片在线看| 性色av一区二区三区免费| 精品一区二区三区日韩| 国产黄色在线播放| 国产精品高精视频免费| 成人av电影在线播放| 欧美xxxx少妇| 狠狠干一区二区| 精品久久久久久久久国产字幕| 91亚洲精品视频在线观看| 日b视频免费观看| 精品欧美久久久| 国模吧视频一区| 黄页免费在线| 欧美一区在线直播| 久久久久久毛片| 日韩高清中文字幕一区二区| 欧美精彩一区二区三区| 欧美日韩国产中字| 欧美一二区在线观看| 国产欧美高清在线| 国产一区二区三区在线观看视频| 美女一区二区视频| 91中文在线| 久久综合给合久久狠狠色| 欧美色另类天堂2015| 日韩免费看片| 欧美性猛交7777777| 国产成人精品久久久| 国产精品国模大尺度视频| 国产视频一区二区在线播放| 真人做人试看60分钟免费| 精品国产乱码91久久久久久网站| 亚洲黑丝一区二区| 成黄免费在线| 国产在线精品一区二区中文 | 欧美大胆性生话| 中文字幕成人一区| 精品视频在线播放免| 精品一区二区免费在线观看| av资源在线看片| 天堂一区二区三区| 日韩av网站在线| 色视频网站在线观看| 日韩欧美亚洲区| 成人黄色在线免费| 亚洲色图校园春色| 91精品国产综合久久久久久 | 在线观看精品自拍私拍| 欧美亚洲网站| 色综合久久久久综合一本到桃花网| 亚洲自拍欧美另类| 日本高清免费不卡视频| 欧美激情五月| 在线视频自拍| 欧美精品免费观看二区| 亚洲第一页自拍| 国产精品一品二品| 在线不卡一区| 91免费日韩| 91久久精品国产91久久| 在线观看免费亚洲| 爽好多水快深点欧美视频| 伊人网在线播放| 鲁一鲁一鲁一鲁一澡| 午夜精品久久久久久久白皮肤| 亚洲免费伊人电影| 亚洲一级一区| 蜜桃视频m3u8在线观看| 国产中文字幕免费观看| 日本国产精品视频| 欧美日韩高清一区| 国产成人免费在线观看| 国产无遮挡裸体免费久久| 在线看三级网站视频| 乱一区二区三区在线播放| 亚洲天天在线日亚洲洲精| 国产精品国产馆在线真实露脸| 婷婷综合伊人| jizzjizz中国精品麻豆| 日韩 欧美 高清| 亚洲free性xxxx护士hd| 日韩成人久久久| 中文字幕av资源一区| 综合久久婷婷| 九色成人搞黄网站| 欧美成人明星100排名| 国产精品视频一区二区高潮| 69久久99精品久久久久婷婷| 国产**成人网毛片九色| 日本激情一区| 一区二区精品伦理...| 日本视频二区| 亚洲精美视频| 国产精品av在线| 日韩经典第一页| 一区二区三区av电影| 老司机午夜精品99久久| 国产成人手机高清在线观看网站| 欧美1234区| x88av蜜桃臀一区二区| 一区二区三区我不卡| 人人澡人人澡人人看欧美| 日韩欧美一级精品久久| |精品福利一区二区三区| 日本不卡的三区四区五区| 中文有码一区| 天堂av中文在线观看| 国产精品精华液网站| 屁屁影院ccyy国产第一页| 国产精自产拍久久久久久蜜| 亚洲人成伊人成综合网久久久| 五月天精品一区二区三区| 成人激情小说乱人伦| 一区在线播放| 久久99精品国产自在现线| 黄页网站在线观看免费| 青娱在线视频| 国产偷人视频免费| 视频一区二区在线| 国产一区二区在线播放| 色天天综合狠狠色| 欧美裸体bbwbbwbbw| 最近日韩中文字幕| 国产精品影视在线| 国产精品黄色| 亚洲肉体裸体xxxx137| 97成人超碰| 丁香花高清在线观看完整版| 三级在线播放| 蜜桃视频中文字幕| 国产又大又黄又粗的视频| 亚洲av首页在线| 久久久99爱| 成人午夜在线观看| 欧美日本亚洲视频| 精品国产免费久久| 欧美日韩在线播放三区四区| 亚洲黄色av一区| 国产日韩欧美制服另类| 成人久久18免费网站麻豆| 久久97超碰国产精品超碰| 日韩在线一区二区三区| 亚洲福利精品|