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