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