完整服務範例
本節中的主題會形成完整的服務範例:
- Sample.mc (包含錯誤訊息)
- Svc.cpp (包含服務程式碼)
- SvcConfig.cpp (包含服務組態程式代碼)
- SvcControl.cpp (包含服務控制程式碼)
建置服務
下列程序說明如何建置服務並註冊事件訊息 DLL。
建置服務並註冊事件訊息 DLL
使用下列步驟,從 Sample.mc 建置訊息 DLL:
- mc -U sample.mc
- rc -r sample.rc
- 連結 -dll -noentry -out:sample.dll sample.res
分別從Svc.cpp、SvcConfig.cpp和SvcControl.cpp建置 Svc.exe、SvcConfig.exe和 SvcControl.exe。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName 建立登錄機碼,並將下列登錄值新增至此機碼。
價值 類型 描述 EventMessageFile = dll_path REG_SZ 僅限資源 DLL 的路徑,其中包含服務可以寫入事件記錄檔的字串。 TypesSupported = 0x00000007 REG_DWORD 指定支援事件類型的位掩碼。 值0x000000007表示支援所有類型。
測試服務
下列程式描述如何測試服務。
測試服務
在 [控制面板] 中,啟動 Services 應用程式。 (在下列步驟中,執行會修改 Services 應用程式中資訊的命令後,使用 F5 鍵重新整理顯示。)
執行下列命令以安裝服務:
svc 安裝
如果作業成功,服務會將「已成功安裝服務」寫入主控台;若失敗,則寫入錯誤訊息。
如果服務安裝成功,服務會顯示在 Services 應用程式中。 請注意,名稱 設定為 “SvcName”,Description 和 Status 為空白,且 [啟動類型] 設定為 [手動]。
執行下列命令以啟動服務:
svccontrol start 服務名稱
如果作業成功,服務控制程式會寫入「服務啟動擱置中...」然後「服務已成功啟動」至控制台。 否則,程式會將錯誤訊息寫入主控台。
如果服務成功啟動,狀態 設定為 「已啟動」。 ServiceMain 函式中的程式代碼是由 SCM 執行。 如果發生錯誤,服務會將錯誤訊息寫入事件記錄檔。 此訊息包含失敗的函式名稱,以及失敗時傳回的錯誤碼。
執行下列命令來更新服務描述:
svcconfig 顯示 SvcName
服務組態程式會在作業成功時將「服務描述已成功更新」寫入主控台;否則,會顯示錯誤訊息。
如果更新成功,[描述] 設定為 [這是測試描述]。
執行下列命令來查詢服務組態:
svcconfig 查詢 SvcName
服務組態程式會在作業成功時將服務組態資訊寫入主控台,否則會顯示錯誤訊息。
執行下列命令來變更服務 DACL:
svccontrol dacl SvcName
如果作業成功,服務組態程式會將「服務 DACL 已成功更新」寫入主控台;否則,它會顯示錯誤訊息。
執行下列命令以停用服務:
svcconfig 停用 SvcName
如果作業成功,服務組態程式會將「服務已成功停用」寫入主控台;否則,會寫入錯誤訊息。
如果已成功停用服務,[啟動類型] 設定為 [已停用]。
執行下列命令以啟用服務:
svcconfig 啟用 SvcName
服務組態程式會將「服務成功啟用」寫入主控台,如果作業成功;否則,會寫入錯誤訊息。
如果已成功啟用服務,[啟動類型] 設定為 [手動]。
執行下列命令以停止服務:
svccontrol stop SvcName
如果作業成功,服務控制程式會寫入「服務停止擱置中...」然後「服務已順利停止」到控制台。 否則,程式會將錯誤訊息寫入主控台。
如果服務成功停止,狀態 為空白。
如果服務無法停止,服務控制程式會將錯誤訊息寫入事件記錄檔,其中包含失敗的函式名稱,以及失敗時傳回的錯誤碼。
執行下列命令來移除服務:
svcconfig 刪除 SvcName
如果操作成功,服務組態程式會將「服務已成功刪除」寫入主控台;否則,會顯示錯誤訊息。
如果已成功刪除服務,它就不會再顯示在 Services 應用程式中。 (請注意,如果您嘗試刪除未停止的服務,作業會成功,但 啟動類型 設定為「已停用」,且服務專案會在系統重新啟動時刪除,或使用任務管理員終止服務時刪除。
相關主題