共用方式為


StartServiceA 函式 (winsvc.h)

啟動服務。

語法

BOOL StartServiceA(
  [in]           SC_HANDLE hService,
  [in]           DWORD     dwNumServiceArgs,
  [in, optional] LPCSTR    *lpServiceArgVectors
);

參數

[in] hService

服務的句柄。 此句柄是由 openServiceCreateService 函式所傳回,而且必須具有SERVICE_START訪問許可權。 如需詳細資訊,請參閱 服務安全性和存取權限

[in] dwNumServiceArgs

lpServiceArgVectors 陣列中的字串數目。 如果 lpServiceArgVectors 為 NULL,此參數可以是零。

[in, optional] lpServiceArgVectors

要傳遞至 serviceMain ServiceMain 函式做為自變數的 null 終止字串。 如果沒有自變數,此參數可以是 NULL。 否則,第一個自變數 (lpServiceArgVectors[0]) 是服務的名稱,後面接著任何其他自變數 (lpServiceArgVectors[1] 到 lpServiceArgVectors[dwNumServiceArgs-1])。

驅動程式服務不會收到這些自變數。

傳回值

如果函式成功,則傳回值為非零值。

如果函式失敗,傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

服務控制管理員可以設定下列錯誤碼。 其他可由服務控制管理員呼叫的登錄函式設定。

傳回碼 描述
ERROR_ACCESS_DENIED
句柄沒有SERVICE_START訪問許可權。
ERROR_INVALID_HANDLE
句柄無效。
ERROR_PATH_NOT_FOUND
找不到服務二進位檔。
ERROR_SERVICE_ALREADY_RUNNING
服務的實例已經執行中。
ERROR_SERVICE_DATABASE_LOCKED
資料庫已鎖定。
ERROR_SERVICE_DEPENDENCY_DELETED
此服務取決於不存在或已標示要刪除的服務。
ERROR_SERVICE_DEPENDENCY_FAIL
此服務相依於另一個無法啟動的服務。
ERROR_SERVICE_DISABLED
服務已停用。
ERROR_SERVICE_LOGON_FAILED
服務因為登入失敗而未啟動。 如果服務設定為在沒有「以服務登入」許可權的帳戶下執行,就會發生此錯誤。
ERROR_SERVICE_MARKED_FOR_DELETE
服務已標示為要刪除。
ERROR_SERVICE_NO_THREAD
無法為服務建立線程。
ERROR_SERVICE_REQUEST_TIMEOUT
服務的進程已啟動,但未呼叫 startServiceCtrlDispatcher,或呼叫 StartServiceCtrlDispatcher 的線程可能會封鎖在控制處理程式函式中。

言論

啟動驅動程式服務時,StartService 函式不會傳回,直到設備驅動器完成初始化為止。

啟動服務時,服務控制管理員 (SCM) 會在必要時繁衍服務進程。 如果指定的服務與其他服務共享進程,則必要的進程可能已經存在。 StartService 函式不會等候新服務的第一個狀態更新,因為可能需要一段時間。 相反地,當 SCM 收到來自服務控制發送器通知時,它會傳回此服務成功建立 ServiceMain 線程。

SCM 會先設定下列默認狀態值,再從 startService 傳回

  • 服務的目前狀態會設定為 SERVICE_START_PENDING。
  • 接受的控件會設定為 none (零)。
  • CheckPoint 值設定為零。
  • WaitHint 時間設定為 2 秒。
呼叫進程可以藉由定期呼叫 QueryServiceStatus 函式來判斷新服務是否已完成初始化,以查詢服務的狀態。

服務無法在初始化期間呼叫 StartService。 原因是 SCM 會在初始化期間鎖定服務控制資料庫,因此呼叫 StartService 將會封鎖。 服務回報成功啟動的 SCM 之後,就可以呼叫 StartService

如同 ControlService,如果有任何服務忙於處理控件程式代碼,StartService 將會封鎖 30 秒。 如果忙碌服務在逾時到期時仍未從其處理程式函式傳回,StartService 失敗並出現ERROR_SERVICE_REQUEST_TIMEOUT。 這是因為 SCM 一次只會處理一個服務控制通知。

例子

如需範例,請參閱 啟動服務

注意

winsvc.h 標頭會將 StartService 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 winsvc.h (包括 Windows.h)
連結庫 Advapi32.lib
DLL Advapi32.dll

另請參閱

ControlService

CreateService

DeleteService

OpenService

QueryServiceDynamicInformation

QueryServiceStatusEx

Service Functions

服務啟動

ServiceMain