備註
本文不適用於 .NET 中的託管服務。 如需使用 Microsoft.Extensions.Hosting.BackgroundService 和 Worker Service 範本之 Windows 服務的最新內容,請參閱:
Windows 服務應用程式是基於一個類別,該類別繼承自System.ServiceProcess.ServiceBase類別。 您可以覆寫來自這個類別的方法,併為其定義功能,以判斷您的服務運作方式。
服務建立所涉及的主要類別如下:
System.ServiceProcess.ServiceBase — 您在建立服務時,覆寫從 ServiceBase 類別繼承的方法,並在這個繼承類別中定義程式碼,以確定服務的運作方式。
System.ServiceProcess.ServiceProcessInstaller 和 System.ServiceProcess.ServiceInstaller - 您可以使用這些類別來安裝和卸載您的服務。
此外,名為 ServiceController 的類別可用來操作服務本身。 此類別不涉及建立服務,但可用來啟動和停止服務、將命令傳遞給它,以及傳回一系列的列舉。
定義您的服務的行為
在您的服務類別中,您可以覆寫基類函式,以決定當您的服務狀態在服務控制管理員中變更時,會發生什麼情況。 類別 ServiceBase 會公開下列方法,您可以覆寫以新增自定義行為。
| 方法 | 覆寫至 |
|---|---|
| OnStart | 指出服務開始執行時應該採取的動作。 您必須在此程式中撰寫程式代碼,您的服務才能執行有用的工作。 |
| OnPause | 指出服務暫停時應該會發生什麼事。 |
| OnStop | 指出服務停止執行時應該會發生什麼事。 |
| OnContinue | 指出當服務在暫停後繼續正常運作時,應該會發生什麼事。 |
| OnShutdown | 請說明當服務正在執行時,系統即將關閉前應該發生什麼事。 |
| OnCustomCommand | 指出您的服務收到自定義命令時應該會發生什麼事。 如需自定義命令的詳細資訊,請參閱 MSDN 在線。 |
| OnPowerEvent | 系統應在收到電源管理事件時如何回應,例如電池電量低或運作暫停時的處理方式。 |
備註
這些方法代表服務在其存留期內移動的狀態;服務會從一個狀態轉換為下一個狀態。 例如,在OnContinue被呼叫之前,您永遠無法讓服務來回應OnStart命令。
有數個其他屬性和方法值得關注。 這些包括:
類別 Run 上的 ServiceBase 方法。 這是服務的主要進入點。 當您使用 Windows 服務範本建立服務時,程式代碼會插入您應用程式的
Main方法來執行服務。 此程式代碼看起來像這樣:ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1() }; Run(ServicesToRun);Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1()} System.ServiceProcess.ServiceBase.Run(ServicesToRun)備註
這些範例會使用 類型的 ServiceBase陣列,在其中新增應用程式所包含的每個服務,然後所有服務都可以一起執行。 不過,如果您只建立單一服務,您可以選擇不使用陣列,而是直接宣告一個繼承自 ServiceBase 的新物件,然後執行它。 如需範例,請參閱 如何:以程序設計方式撰寫服務。
ServiceBase 類別上的一系列屬性。 這些會決定可在您的服務上呼叫哪些方法。 例如,當將CanStop屬性設定為
true時,可以呼叫服務上的OnStop方法。 當CanPauseAndContinue屬性被設定為true時,OnPause與OnContinue方法可以被呼叫。 當您將其中一個屬性設定為true時,應該覆寫並定義相關方法的處理邏輯。
您也可以使用稱為 ServiceController 的元件來與現有服務的行為通訊並控制其行為。