程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅:C#開發Windows Service程序(下)(6)

C#發現之旅:C#開發Windows Service程序(下)(6)

編輯:關於C語言

在這個過程中,首先使用MyConfig.Load從數據庫中加載系統配置,然後遍 歷所有需要監視的路徑,對其中的每個路徑解析出目錄名和文件名,然後創建一個 FileSystemWatcher對象,設置其Path和Filter屬性,還根據MyConfig中的系統配置來綁定監 視對象的Changed事件,Created事件,Deleted事件和Renamed事件,以實現對文件系統的監 視。這裡綁定事件的代碼使用了C#2.0的匿名委托的語法功能。設置FileSystemWatcher對象 後將該對象添加到文件系統監視器列表myWatchers中。

啟動服務後使用 EventLog.WriteEntry向Windows系統事件日志添加一些日志信息。

這裡使用了一個 WriteFileSystemLog方法,該方法代碼為

private void WriteFileSystemLog (string ObjectName, string EventStyle )
{
    System.Data.IDbConnection conn = Util.DBConnection;
    if (conn == null)
        return;
    // 將監視結果添加到數據庫中
    using (System.Data.IDbCommand cmd = conn.CreateCommand())
    {
        cmd.CommandText = "Insert Into FileSystemLog ( RecordID , WatchTime , ObjectName , EventStyle ) Values ( '" + System.Guid.NewGuid ().ToString() + "' , '" + DateTime.Now.ToString("yyyy-MM- dd HH:mm:ss") + "' , ? , '" + EventStyle + "') " ;
        System.Data.IDbDataParameter p = cmd.CreateParameter();
        p.Value = ObjectName;
        cmd.Parameters.Add(p);
        cmd.ExecuteNonQuery();
    }
}

該方法參數是記錄的文件或目錄名,以及事件類型,程序首先拼湊出一個 Insert的SQL語句,然後向數據表FileSystemLog添加一條數據。

類型 MyFileSystemWatcherService還重載了ServiceBase的OnStart,OnStop,OnPause, OnContinue等方法來響應外界對服務過程的控制。

OnStart方法的代碼如下,該方法 調用StartFileSystemWatching函數就算完成了啟動服務的操作。

protected override void OnStart(string[] args)
{
    this.StartFileSystemWatching();
}

OnStop方法的代碼如下,該方法首先銷毀掉所有正在運行的文件系統監視器 ,然後關閉數據庫連接。

protected override void OnStop()
{
    if (myWatchers != null)
    {
        foreach (System.IO.FileSystemWatcher w in myWatchers)
        {
            w.EnableRaisingEvents = false;
            w.Dispose();
        }
        myWatchers = null;
    }
    Util.CloseDBConnection();
    base.OnStop();
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved