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,安裝服務