Windows服務樣例
下面是一個測試案例,服務名為Service1 黑色部分為自動生成,紅色部分為我加進去的程式碼,綠色為我加入的註釋,此案例沒有其他意義,只是將記錄插入到資料庫中。
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.ServiceProcess; using System.Configuration.Install; using SysData.Db;
namespace serverTest { public class Service1 : System.ServiceProcess.ServiceBase { private System.Timers.Timer timer1; /// <summary> /// 必需的設計器變數。 /// </summary> private System.ComponentModel.Container components = null;
public Service1() { // 該呼叫是 Windows.Forms 元件設計器所必需的。 InitializeComponent();
// TODO: 在 InitComponent 呼叫後新增任何初始化 }
// 程式的主入口點 static void Main() { System.ServiceProcess.ServiceBase[] ServicesToRun; // 同一程式中可以執行多個使用者服務。若要將 //另一個服務新增到此程式,請更改下行 // 以建立另一個服務物件。例如, // // ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()}; // ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun); }
/// <summary> /// 設計器支援所需的方法 - 不要使用程式碼編輯器 /// 修改此方法的內容。 /// </summary> private void InitializeComponent() { this.timer1 = new System.Timers.Timer(); ((System.ComponentModel.ISupportInitialize)(this.timer1)).BeginInit(); // // timer1 // this.timer1.Enabled = true; this.timer1.Interval = 30000; this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed); // // Service1 // this.ServiceName = "Service1"; ((System.ComponentModel.ISupportInitialize)(this.timer1)).EndInit();
}
/// <summary> /// 清理所有正在使用的資源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); }
/// <summary> /// 設定具體的操作,以便服務可以執行它的工作。 /// </summary> protected override void OnStart(string[] args) { // TODO: 在此處新增程式碼以啟動服務。 this.timer1.Enabled = true; this.LogMessage("Service Started"); } /// <summary> /// 停止此服務。 /// </summary> protected override void OnStop() { // TODO: 在此處新增程式碼以執行停止服務所需的關閉操作。 this.timer1.Enabled = false; this.LogMessage("Service Stopped"); }
private void LogMessage(string xMsg) { try { //這裡向資料庫中插入一條資訊為 xMsg的記錄,下邊是我呼叫事先寫好的Db類新增記錄的方法,您也可以使用其他辦法來寫入資料庫。 //Db.QuerySQL("Insert into SysMsg (SysMsg) values ('"+xMsg+"')"); } catch { //不做任何操作 } }
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { LogMessage("檢查服務執行!"); } } }
|