共用方式為


服務應用程式程式設計架構

備註

本文不適用於 .NET 中的託管服務。 如需使用 Microsoft.Extensions.Hosting.BackgroundService 和 Worker Service 範本之 Windows 服務的最新內容,請參閱:

Windows 服務應用程式是基於一個類別,該類別繼承自System.ServiceProcess.ServiceBase類別。 您可以覆寫來自這個類別的方法,併為其定義功能,以判斷您的服務運作方式。

服務建立所涉及的主要類別如下:

此外,名為 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時,OnPauseOnContinue方法可以被呼叫。 當您將其中一個屬性設定為 true 時,應該覆寫並定義相關方法的處理邏輯。

    備註

    您的服務必須至少覆蓋 OnStartOnStop 才有用。

您也可以使用稱為 ServiceController 的元件來與現有服務的行為通訊並控制其行為。

另請參閱