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