一、 服務簡介
Windows服務,也就是先前的NT服務,該項技術可以讓您建立長期執行的應用程序,服務沒有任何用戶界面,它可以在電腦開機時自動啟動,您不一定需要登錄您的電腦,但是它已經開始工作了!您可以通過服務控制管理員來啟動、停止、暫停、繼續您的服務。要開啟服務控制管理員請遵循以下步驟:點擊開始→設定→控制台→系統管理工具→服務。一個典型的服務的例子是:萬緯網發布服務,該服務提供網頁的鏈接和管理,見下圖:
了解了Windows服務的基本概念後我們開始制作自己的Windows服務,請跟我一步一步來!
二、 Step By Step
1. 使用Windows服務的范本來建立專案(該步驟會為您自動建立繼承自ServiceBase 的類別)
2. 為OnStart和OnStop函數撰寫程式碼(OnStart和OnStop分別覆寫ServiceBase的OnStart和OnStop函數,目的是定義服務啟動時和停止時需要執行的程式碼)
3. 為服務加入安裝元件
4. 編譯您的專案
5. 建立安裝專案來安裝您的服務
6. 存取服務控制管理員並啟動您的服務
使用范本建立專案
打開VS.NET 2003,在起始頁上點擊新增專案或選擇檔案菜單→新增→專案來開啟新增專案對話框,
在專案類型欄內選擇Visual C#專案,在范本欄內選擇Windows服務,在名稱文本框中輸MyFirstService,點擊確定開啟專案,見下圖:
按下確定按鈕後.NET將自動為您創建一個繼承自ServiceBase的類,默認名稱為Service1,接下來設定Service1的ServiceName屬性為MyFirstService和AutoLog屬性為True,ServiceName代表服務在安裝後的名稱,AutoLog代表是否將服務的動作如安裝、啟動等寫如事件記錄檔,見下圖:
接下來在Service1.cs[設計]中雙擊鼠標可打開代碼編輯器,見下圖:
為OnStart和OnStop函數撰寫程式碼
回到Service1.cs[設計]界面,在工具箱中選取元件菜單,將EventLog控件拖到設計畫面上,見下圖:
回到代碼編輯器,在Service1的構造函數內輸入以下代碼:
if (!System.Diagnostics.EventLog.SourceExists("MyFirstSource"))
{
System.Diagnostics.EventLog.CreateEventSource("MyFirstSource","MyFirstLog");
}
this.eventLog1.Source = "MyFirstSource";
this.eventLog1.Log = "MyFirstLog";
該段代碼的目的是創建一個名為MyFirstLog的事件記錄檔,並將所有寫入事件記錄檔的事件的來源名稱設為MyFirstSource,見下圖:
接下來使用EventLog控件的功能來編寫OnStart和OnStop的程式碼,實現在服務啟動和停止時將信息寫入事件記錄檔的功能:
/// <summary>
/// 設定使服務能開始執行的事務。
/// </summary>
protected override void OnStart(string[] args)
{
// TODO: 在此加入啟動服務的程式碼。
this.eventLog1.WriteEntry("In OnStart");
}
/// <summary>
/// 停止這項服務。
/// </summary>
protected override void OnStop()
{
// TODO: 在此加入停止服務所需執行的終止程式碼。
this.eventLog1.WriteEntry("In OnStop");
}
注意:this.eventLog1.WriteEntry("")實現將信息寫入事件記錄檔。見下圖:
為服務加入安裝元件
若要為服務加入安裝元件,請遵循一下步驟:
回到Service1.cs[設計]界面,按一下設計工具的背景 (Background) 來選取服務本身,而不是它的內容,在 [屬性] 視窗中,按一下屬性清單下方灰色區域的 [加入安裝程式] 連結,這時.NET將會為您加入一個名為ProjectInstaller的安裝元件,見下圖:
接下來選中serviceInstaller1控件,在 [屬性] 視窗中,將 ServiceName 屬性設為 MyFirstService,將 StartType 屬性設定為 Automatic,見下圖:
接下來選中serviceProcessInstaller控件,在 [屬性] 視窗中,將 Account 屬性設定為 LocalSystem,見下圖:
編譯您的專案
在 [方案總管] 中,以滑鼠右鍵按一下您的專案,然後從快速鍵功能表中選取 [屬性]。
專案的 [屬性頁] 對話方塊隨即出現。
在左窗格中,選取 [通用屬性] 資料夾中的 [一般] 索引標籤。
從 [啟始物件] 清單選擇MyFirstService.Service1按下 [確定]。 按 CTRL+SHIFT+B 以建置專案。 見下圖:
建立安裝專案來安裝您的服務
在 [檔案] 功能表上,指向 [加入專案],然後選擇 [新增專案]。
在 [專案類型] 窗格中,選取 [安裝和部署專案] 資料夾。
在 [範本] 窗格中,選取 [安裝專案]。將專案命名為 MyFirstServiceSetup。
接著就會將安裝專案加入方案。見下圖:
接下來,在 [方案總管] 中,以滑鼠右鍵按一下 MyFirstServiceSetup,指向 [加入],然後選擇 [專案輸出]。接著會出現 [加入專案輸出群組] 對話方塊。
[專案] 方塊中會選取 MyFirstService。
從清單方塊中選取 [主要輸出],然後按一下 [確定]。
接著就會將 MyFirstService的主要輸出專案項目加入至安裝專案中。見下圖:
在 [方案總管] 中,用滑鼠右鍵按一下安裝專案,指向 [檢視],然後選擇 [自訂動作]。
接著會出現 [自訂動作] 編輯器。
在 [自訂動作] 編輯器中,用滑鼠右鍵按一下 [自訂動作] 節點,然後選擇 [加入自訂動作]。
接著會出現 [選取專案中項目] 對話方塊。
連按兩下清單方塊中的 [應用程式資料夾] 來開啟它,選取 [主要輸出 MyFirstService (作用中)] 並按一下 [確定]。
接著主要輸出就會加入至自訂動作的所有四個節點 — [安裝]、[認可]、[復原] 及 [解除安裝]。
在 [方案總管] 中的 [MyFirstServiceSetup] 專案上按一下滑鼠右鍵,並選擇 [建置]。 見下圖:
接下來安裝服務,右鍵點擊MyFirstServiceSetup,選擇安裝,見下圖:
接下來會彈出安裝程序,一直點擊下一步既可完成安裝,見下圖:
存取服務控制管理員並啟動您的服務
在安裝完成之後,服務既出現在服務控制管理員中,注意:在第一次安裝時服務不會自動啟動,必 須重新啟動電腦它才會自動啟動,在這裡我們就手動啟動它吧,見下圖:
雙擊該服務,點擊啟動按鈕,見下圖:
啟動後點擊確定,在事件檢視器中可以查看我們的服務所寫下的信息,要開啟事件檢視器請遵循以下步驟:點擊開始→設定→控制台→系統管理工具→事件檢視器,見下圖:
雙擊某一個資訊可以查看其詳細,見下圖:
好了,到此我們的服務就創建完成了,可能篇幅有點長,不過還是挺簡單的!在了解了Windows服務後,您可以充分發揮您的想象力,用它來實現您的每一個奇思怪想!