Windows服務簡單應用之監聽文件夾內的文件


  Windows服務還是比較強大的,這種應用程序沒有用戶界面,可以隨系統的啟動而運行起來,任何用戶消息可以被寫進Windows事件日志里,也可以將服務設置為本地服務,不受用戶限制,可以對服務進行暫停繼續等,但是如果服務是做實時監控的話,還是建議將服務的暫停功能禁掉。

  優點說了一堆了,看看實戰吧,所謂的實戰也是從別人的博客中學習過來的,我這里就借用一下夢幻Dot Net的一篇博客——用.Net開發Windows服務初探。講的比較詳細了,我在這里是要說一下我在創建Windows服務時遇到的一些問題,分享給大家。

————————————————————————————————————————————————————————————————————

  首先要說的是安裝Windows服務:

    安裝服務需要用到InstallUtil.exe程序,將編譯好的服務應用程序的路徑拷貝下來,進入CMD,找到服務應用程序所在目錄,運行"InstallUtil YourServiceName.exe"。

    問題就來了,如果是在系統環境變量中未做設置,這里就會報錯了,提示InstallUtil命令不可用,那就配置一下環境變量吧,一般目錄都在“C:\Windows\Microsoft.NET\Framework\v4.0.30319”,如果項目版本是4.0的話就設置這個路徑吧,如果這個設置的版本低,還會報出版本比應用程序版本低的錯誤。

    上面的問題如果不想麻煩也可以,單擊“開始-->所有程序-->Microsoft Visual Studio 2010-->Visual Studio Tools-->Visual Studio 命令提示(2010)”,后續一樣。

    還有一點要注意的是重新編譯的服務都要先卸載掉原來的Windows服務,然后再安裝重新編譯好的Windows服務。

  其次要說的是EventLog的屬性設置:

    在我的項目中添加了EventLog控件,他有一個屬性EnableRaisingEvents,Microsoft給出的解釋是“指示該組建是否監視事件日志的更改情況”,默認為False,如果改為True則安裝好Windows服務之后無法啟動該服務。具體原因暫時不清楚,也許和其他設置有關系吧,如果有明白的童鞋還請指教。

  最后貼上我的源碼供大家分享:(不顯示行號了,為了大家拷貝方便)

    

     private bool servicePaused = false;
     ///
<summary>
/// 啟動服務
/// </summary>
/// <param name="args"></param>
protected override void OnStart(string[] args)
{
eventLog.WriteEntry(" 這個服務在:" + DateTime.Now.ToString() + "被啟動了!");

fileSystemWatcher.EnableRaisingEvents = true;//開始監聽
fileSystemWatcher.IncludeSubdirectories = true;

fileSystemWatcher.Changed += new FileSystemEventHandler(OnFileChanged);
fileSystemWatcher.Created += new FileSystemEventHandler(OnFileCreated);
fileSystemWatcher.Deleted += new FileSystemEventHandler(OnFileDeleted);
fileSystemWatcher.Renamed += new RenamedEventHandler(OnFileRenamed);
}
     /// <summary>
        /// 停止服務
        /// </summary>
        protected override void OnStop()
        {

        }


        private void OnFileChanged(Object source, FileSystemEventArgs e)
        {  
      if (servicePaused == false)
           {
                eventLog.WriteEntry(e.Name + " 這個文件在:" + DateTime.Now.ToString() + "被改動了!");
           }        
        }

        private void OnFileRenamed(Object source, RenamedEventArgs e)
        {
            if (servicePaused == false)
            {
                eventLog.WriteEntry(e.Name + " 這個文件在:" + DateTime.Now.ToString() + "被重命名了!");
            }
        }

        private void OnFileCreated(Object source, FileSystemEventArgs e)
        {
            if (servicePaused == false)
            {
                eventLog.WriteEntry(e.Name + " 這個文件在:" + DateTime.Now.ToString() + "被創建了!");
            }
        }

        private void OnFileDeleted(Object source, FileSystemEventArgs e)
        {
            if (servicePaused == false)
            {
                eventLog.WriteEntry(e.Name + " 這個文件在:" + DateTime.Now.ToString() + "被刪除了!");
            }
        }



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM