在Windows服務中使用EventLog組件紀錄日志


1,在Service1.cs文件的設計窗口中添加工具EventLog

 private static Timer timer = new Timer();
        public Service1()
        {
            InitializeComponent();
               if (!System.Diagnostics.EventLog.SourceExists("MySource"))
           {
                 System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
           }
               eventLog1.Source = "MySource";
               eventLog1.Log = "MyNewLog";
 
        }

        protected override void OnStart(string[] args)
        {
              // TODO: 在此處添加代碼以啟動服務。  
            //初始化Timers
            timer.Interval = 12000;

            eventLog1.WriteEntry("開始日志紀錄");

          
                  String s = System.DateTime.Now.ToString();  
                if(!File.Exists(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt"))  
                {
                     StreamWriter sr = File.CreateText(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt");  
                       sr.WriteLine("-------------------------START SRV---------------------");  
                       sr.WriteLine ("我的新服務在{0}時間開始",s);  
                      sr.WriteLine ("我可以寫整型 {0} or 浮點型 {1},等等.",1, 4.2);
                      sr.Close(); 
               }  
                  else 
               {  
                      StreamWriter sr = File.AppendText(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt");  
                      sr.WriteLine("-------------------------START SRV---------------------");  
                      sr.Close();  
                 }

                timer.Enabled = true;
                timer.Start();
                timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);



        }

        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            using (StreamWriter sw=File.AppendText (@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt"))
            {
                sw.WriteLine("----------------"+DateTime.Now.ToString ()+"---------------------"+"\r\n");

                eventLog1.WriteEntry("-------------日志紀錄中-----------------------");
            }
        }

        protected override void OnStop()
        {

             // TODO: 在此處添加代碼以執行停止服務所需的關閉操作。

            //結束定時
            timer.Enabled = false;
            timer.Stop();
            eventLog1.WriteEntry("日志紀錄結束");
                        String s1 = System.DateTime.Now.ToString();
                        if (!File.Exists(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt"))  
                       {  
                         StreamWriter sr = File.CreateText(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt");  
                         sr.WriteLine("-------------------------STOP SRV---------------------");  
                         sr.WriteLine ("我的新服務在{0}時間停止",s1);  
                        sr.Close();  
                       }  
                        else 
                        {  
                        StreamWriter sr = File.AppendText(@"C:\Users\ITCA\Desktop\MyWindowsServiceTest.txt");  
                        sr.WriteLine("-------------------------STOP SRV---------------------");  
                        sr.WriteLine ("我的新服務在{0}時間停止",s1);  
                        sr.Close();  
                        }
         


        }
}

  在

  public Service1()
        {
            InitializeComponent();
               if (!System.Diagnostics.EventLog.SourceExists("MySource"))
           {
                 System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
           }
               eventLog1.Source = "MySource";
               eventLog1.Log = "MyNewLog";
 
        }

  中 Service1的構造函數中  判斷是否已經存在事件源MySource 如果存在指定EventLog的屬性Source 和Log  這兩個屬性是自定義的  不存在就創建一個 System.Diagnostics.EventLog.CreateEventSource(                     "MySource", "MyNewLog");

                  在這里 事件源MySource並不須要我們寫什么代碼 它只是一個自定義的字符串 在   事件查看器  下  windows日志下

          應用程序中 顯示  的日記來源 就是我們自定義的 MySource 

         系統中        (如果卸載了此服務 后會有一個來源為Eventlog的日志,任務類型為 日志清除 【在添加組件並設置eventlog屬性時有一個屬性 顯示 卸載此服務時是否 清除日志】)

                      打開這個來源為Eventlog的日志         顯示信息為  MyNewLog日志文件已被清除

 

 

然后在OnStart()和OnStop()方法中寫自己的邏輯代碼

在服務開啟或關閉時時    eventlog1.WriteEntity("這里是寫入日志的自定義內容");

也可以在定時器中 每隔一段時間報告狀態  ,

2,在Service1.Designer.cs文件中時vs在我們 創建服務時自動生成的代碼  

 partial class Service1
    {
        /// <summary> 
        /// 必需的設計器變量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的資源。
        /// </summary>
        /// <param name="disposing">如果應釋放托管資源,為 true;否則為 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region 組件設計器生成的代碼

        /// <summary> 
        /// 設計器支持所需的方法 - 不要
        /// 使用代碼編輯器修改此方法的內容。
        /// </summary>
        private void InitializeComponent()
        {
            this.eventLog1 = new System.Diagnostics.EventLog();
            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
            // 
            // Service1
            // 
            this.CanPauseAndContinue = true;
            this.CanShutdown = true;
            this.ServiceName = "MyWindowsService";
            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();

        }

        #endregion

        private System.Diagnostics.EventLog eventLog1;

    }

  

在 組件設計器生成的代碼  中

   #region 組件設計器生成的代碼

        /// <summary> 
        /// 設計器支持所需的方法 - 不要
        /// 使用代碼編輯器修改此方法的內容。
        /// </summary>
        private void InitializeComponent()
        {
            this.eventLog1 = new System.Diagnostics.EventLog();
            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
            // 
            // Service1
            // 
            this.CanPauseAndContinue = true;
            this.CanShutdown = true;
            this.ServiceName = "MyWindowsService";
            ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();

        }

        #endregion

  添加  //             // Service1             //          

   this.CanPauseAndContinue = true;   //服務是否可以暫停 並在再繼續      

    this.CanShutdown = true;     //系統關閉時通知服務

        this.ServiceName = "MyWindowsService";//指定服務名為  創建服務的項目名稱

 

3,生服務組件  在Service1.cs中右擊 

添加安裝程序

單擊eventlog組件  右擊

添加安裝程序

生成ProjectInstaller.cs文件

4,ProjectInstaller.cs文件中  選中組件  右擊設置屬性

            serviceInstaller1 中ServiceName 為MyWindowsService

 

                                  StartType 中  設如何啟動Manual 手動  Automatic自動

             serviceProcessInstaller1中 Account賬戶類型 設置為  LocaSystem  本地賬戶

 

5,編譯  生成 

 

6,安裝服務

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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