服務進入點
服務通常會撰寫為主控台應用程式。 主控台應用程式的進入 點是其主要功能 。 main函式會從服務的登錄機碼接收ImagePath值的引數。 如需詳細資訊,請參閱 CreateService 函式的一節。
當 SCM 啟動服務程式時,它會等候它呼叫 StartServiceCtrlDispatcher 函式。 使用下列指導方針。
- SERVICE_WIN32_OWN_PROCESS類型的服務應該立即從其主要執行緒呼叫 StartServiceCtrlDispatcher 。 您可以在服務啟動時執行任何初始化,如 Service ServiceMain 函式中所述。
- 如果服務類型是SERVICE_WIN32_SHARE_PROCESS,而且程式中所有服務都有常見的初始化,您可以在呼叫 StartServiceCtrlDispatcher之前,先在主執行緒中執行初始化,只要花費不到 30 秒的時間即可。 否則,您必須建立另一個執行緒來執行一般初始化,而主執行緒則呼叫 StartServiceCtrlDispatcher。 在服務啟動時,您仍應該執行任何服務特定的初始化。
StartServiceCtrlDispatcher函式會針對進程中包含的每個服務採用SERVICE_TABLE_ENTRY結構。 每個結構都會指定服務名稱和服務的進入點。 如需範例,請參閱 撰寫服務程式的主要函式。
如果 StartServiceCtrlDispatcher 成功,則呼叫執行緒不會傳回,直到進程中的所有執行中服務都進入SERVICE_STOPPED狀態為止。 SCM 會透過具名管道將控制要求傳送至此執行緒。 執行緒會做為控制發送器,執行下列工作:
- 建立新的執行緒,以在啟動新服務時呼叫適當的進入點。
- 呼叫適當的 處理常式函式 來處理服務控制要求。
相關主題