ServiceBase 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供將會屬於服務應用程之服務的基底類別。 當建立新的服務類別時,必須衍生自 ServiceBase。
public ref class ServiceBase : System::ComponentModel::Component
public class ServiceBase : System.ComponentModel.Component
type ServiceBase = class
inherit Component
Public Class ServiceBase
Inherits Component
- 繼承
- 衍生
備註
在服務應用程式中定義服務類別時衍生自 ServiceBase 。 任何有用的服務會 OnStart 覆寫 和 OnStop 方法。 如需其他功能,您可以覆寫 OnPause 特定 OnContinue 行為,以回應服務狀態的變更。
服務是長時間執行的可執行檔,不支援使用者介面,而且可能無法在登入的使用者帳戶下執行。 服務可以執行,而不需要任何使用者登入電腦。
根據預設,服務會在 [系統帳戶] 下執行,這與系統管理員帳戶不同。 您無法變更系統帳戶的許可權。 或者,您可以使用 ServiceProcessInstaller 來指定將執行服務的使用者帳戶。
可執行檔可以包含多個服務,但必須針對每個服務包含個別 ServiceInstaller 的服務。 實例 ServiceInstaller 會向系統註冊服務。 安裝程式也會將每個服務與可用來記錄服務命令的事件記錄檔產生關聯。 可執行檔中的 函 main()
式會定義應該執行哪些服務。 服務的目前工作目錄是系統目錄,而不是可執行檔所在的目錄。
當您啟動服務時,系統會找出可執行檔,並針對包含在可執行檔內的該服務執行 OnStart 方法。 不過,執行服務與執行可執行檔不同。 可執行檔只會載入服務。 服務 (存取,例如透過服務控制管理員啟動和停止) 。
可執行檔會在您第一次在服務上呼叫 Start 時呼叫 ServiceBase 衍生類別的建構函式。 在 OnStart 建構函式執行之後,會立即呼叫命令處理方法。 第一次載入服務之後,不會再次執行建構函式,因此您必須將建構函式所執行的處理與 所 OnStart 執行的分開。 任何可以釋出 OnStop 的資源都應該在 中 OnStart 建立。 在建構函式中建立資源可防止在釋放資源之後再次啟動服務時 OnStop 正確建立資源。
服務控制管理員 (SCM) 提供與服務互動的方式。 您可以使用 SCM 將 Start、Stop、Pause、Continue 或自訂命令傳遞至服務。 SCM 會使用 和 CanPauseAndContinue 的值 CanStop 來判斷服務是否接受 Stop、Pause 或 Continue 命令。 只有在對應的屬性 CanStop 或位於 true
服務類別時,SCM 操作功能表中才會啟用 Stop、Pause 和 CanPauseAndContinue Continue。 如果啟用,命令會傳遞至服務,並 OnStop 呼叫 、 OnPause 或 OnContinue 。 如果 CanStop 、 CanShutdown 或 CanPauseAndContinue 為 false
,則即使您已實作 方法,對應的命令處理方法 (例如 OnStop) 也不會處理。
您可以使用 類別 ServiceController ,以程式設計方式執行 SCM 使用使用者介面的功能。 您可以將主控台中可用的工作自動化。 如果 CanStop 為 、 CanShutdown 或 CanPauseAndContinue , true
但尚未實作對應的命令處理方法, (例如 OnStop) 系統擲回例外狀況並忽略命令。
您不需要在 中實 OnStart 作 ServiceBase 、 OnStop 或任何其他方法。 不過,服務的行為會在 中 OnStart 描述,因此至少應該覆寫此成員。 可執行檔 main()
的函式會呼叫 Run 方法,向服務控制管理員註冊可執行檔中的服務。
ServiceName傳遞給 Run 方法之 ServiceBase 物件的 屬性必須符合 ServiceName 該服務之服務安裝程式的 屬性。
您可以使用 InstallUtil.exe
在系統上安裝服務。
注意
您可以指定應用程式事件記錄檔以外的記錄檔來接收服務呼叫的通知,但 或 EventLog 屬性都無法 AutoLog 寫入自訂記錄檔。
false
如果您不想使用自動記錄,請將 設定 AutoLog 為 。
建構函式
ServiceBase() |
建立 ServiceBase 類別的新執行個體。 |
欄位
MaxNameLength |
指示服務名稱的最大值。 |
屬性
AutoLog |
指示是否在事件記錄檔中報告啟動、停止、暫停和繼續等命令。 |
CanHandlePowerEvent |
取得或設定值,指出服務是否可以處理電腦電源狀態變更時發生的告知。 |
CanHandleSessionChangeEvent |
取得或設定值,指出服務是否可以處理從 Terminal Server 工作階段所擷取的工作階段變更事件。 |
CanPauseAndContinue |
取得或設定值,指出服務是否可以暫停和繼續。 |
CanRaiseEvents |
取得值,指出元件是否能引發事件。 (繼承來源 Component) |
CanShutdown |
取得或設定值,指出當系統關閉時是否應該通知服務。 |
CanStop |
取得或設定值,指出一旦服務已經啟動是否可以停止它。 |
Container |
取得包含 IContainer 的 Component。 (繼承來源 Component) |
DesignMode |
取得值,指出 Component 目前是否處於設計模式。 (繼承來源 Component) |
EventLog |
取得事件記錄檔,您可以利用該事件記錄將服務命令呼叫 (例如啟動和停止) 通知寫入應用程式事件記錄檔。 |
Events |
取得附加在這個 Component 上的事件處理常式清單。 (繼承來源 Component) |
ExitCode |
取得或設定服務的結束代碼 (Exit Code)。 |
ServiceHandle |
取得服務的服務控制處理。 |
ServiceName |
取得或設定用來識別系統服務的簡短名稱。 |
Site | (繼承來源 Component) |
方法
CreateObjRef(Type) |
建立包含所有相關資訊的物件,這些資訊是產生用來與遠端物件通訊的所需 Proxy。 (繼承來源 MarshalByRefObject) |
Dispose() |
釋放 Component 所使用的所有資源。 (繼承來源 Component) |
Dispose(Boolean) |
處置 (Dispose) ServiceBase 所使用的資源 (除了記憶體之外)。 |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetLifetimeService() |
已淘汰.
擷取控制這個執行個體存留期 (Lifetime) 原則的目前存留期服務物件。 (繼承來源 MarshalByRefObject) |
GetService(Type) |
傳回表示 Component 或其 Container 所提供之服務的物件。 (繼承來源 Component) |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
InitializeLifetimeService() |
已淘汰.
取得存留期服務物件,以控制這個執行個體的存留期原則。 (繼承來源 MarshalByRefObject) |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
MemberwiseClone(Boolean) |
建立目前 MarshalByRefObject 物件的淺層複本。 (繼承來源 MarshalByRefObject) |
OnContinue() |
在衍生類別中實作時,當服務控制管理員 (SCM) 傳送繼續命令給服務時,將執行 OnContinue()。 指定暫停服務後要繼續正常運作所要執行的動作。 |
OnCustomCommand(Int32) |
在衍生類別中實作時,當服務控制管理員 (SCM) 傳遞自訂命令給服務時,將執行 OnCustomCommand(Int32)。 指定在具有指定參數值的命令發生時所要執行的動作。 |
OnPause() |
在衍生類別中實作時,當服務控制管理員 (SCM) 傳送暫停命令至服務時執行。 指定在服務暫停時所要執行的動作。 |
OnPowerEvent(PowerBroadcastStatus) |
在衍生類別中實作時,當電腦的電源狀態已經變更時執行。 這適用於攜帶型電腦,當它們進入暫停模式的時候,不同於系統關閉。 |
OnSessionChange(SessionChangeDescription) |
當從 Terminal Server 工作階段接收到變更事件時執行。 |
OnShutdown() |
在衍生類別中實作時,當系統正在關閉時執行。 指定緊接在系統關閉之前應該發生的處理。 |
OnStart(String[]) |
在衍生類別中實作時,當服務控制管理員 (SCM) 傳送啟動命令至服務或當作業系統啟動 (自動啟動服務) 時執行。 指定在服務啟動時所要執行的動作。 |
OnStop() |
在衍生類別中實作時,當服務控制管理員 (SCM) 傳送停止命令至服務時執行。 指定在服務停止執行時所要執行的動作。 |
RequestAdditionalTime(Int32) |
要求額外時間進行暫止的運算。 |
RequestAdditionalTime(TimeSpan) |
從 OnStart、OnStop、OnPause 或 OnContinue 呼叫此方法時,指定的等候提示會傳遞至服務控制管理員,以避免將服務標示為未回應。 |
Run(ServiceBase) |
使用服務控制管理員 (SCM) 登錄服務的可執行檔。 |
Run(ServiceBase[]) |
使用服務控制管理員 (SCM) 登錄多個服務的可執行檔。 |
ServiceMainCallback(Int32, IntPtr) |
登錄命令處理常式 (Command Handler) 並啟動服務。 |
Stop() |
停止執行中的服務。 |
ToString() |
傳回任何包含 Component 名稱的 String。 不應覆寫此方法。 (繼承來源 Component) |
事件
Disposed |
當 Dispose() 方法的呼叫處置元件時,就會發生。 (繼承來源 Component) |