完整服務範例

本節中的主題形成完整的服務範例:

建置服務

下列程式描述如何建置服務並註冊事件訊息 DLL。

建置服務並註冊事件訊息 DLL

  1. 使用下列步驟從 Sample.mc 建置訊息 DLL:

    1. mc -U sample.mc
    2. rc -r sample.rc
    3. link -dll -noentry -out:sample.dll sample.res
  2. 分別從 Svc.cpp、SvcConfig.cpp 和 SvcControl.cpp 建置Svc.exe、SvcConfig.exe和SvcControl.exe。

  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName建立登錄機碼 並將下列登錄值新增至此機碼。

    類型 Description
    EventMessageFile = dll_path REG_SZ 僅限資源 DLL 的路徑,其中包含服務可以寫入事件記錄檔的字串。
    TypesSupported = 0x00000007 REG_DWORD 指定支援之事件種類的位元遮罩。 值0x000000007表示支援所有類型。

     

測試服務

下列程式說明如何測試服務。

若要測試服務

  1. 在 主控台中,啟動[服務] 應用程式。 (在下列步驟中,使用 F5 鍵在執行修改 Services 應用程式中資訊的命令之後重新整理顯示。)

  2. 執行下列命令以安裝服務:

    svc 安裝

    如果作業成功或錯誤訊息,服務會將「已成功安裝服務」寫入主控台。

    如果服務安裝成功,服務會顯示在 服務 應用程式中。 請注意, Name 設定為 「SvcName」, [描述 ] 和 [狀態 ] 是空白的,而 [啟動類型 ] 會設定為 「Manual」。

  3. 執行下列命令以啟動服務:

    svccontrol start SvcName

    如果作業成功,服務控制程式會寫入「服務啟動擱置中...」然後「服務已成功啟動」到主控台。 否則,程式會將錯誤訊息寫入主控台。

    如果服務成功啟動, [狀態 ] 會設定為 [已啟動]。 ServiceMain 函式中的程式碼是由 SCM 執行。 如果發生錯誤,服務會將錯誤訊息寫入事件記錄檔。 此訊息包含失敗的函式名稱,以及失敗時傳回的錯誤碼。

  4. 執行下列命令來更新服務描述:

    svcconfig 描述 SvcName

    如果作業成功或錯誤訊息,服務組態程式會將「服務描述已成功更新」寫入主控台。

    如果更新成功, 描述 會設定為 「這是測試描述」。

  5. 執行下列命令來查詢服務組態:

    svcconfig 查詢 SvcName

    如果作業成功或錯誤訊息,服務組態程式會將服務組態資訊寫入主控台。

  6. 執行下列命令來變更服務 DACL:

    svccontrol dacl SvcName

    如果作業成功或錯誤訊息,服務組態程式會將「服務 DACL 已成功更新」寫入主控台。

  7. 執行下列命令以停用服務:

    svcconfig 停用 SvcName

    如果作業成功或錯誤訊息,服務組態程式會將「服務停用成功」寫入主控台。

    如果已成功停用服務, 啟動類型 會設定為 「Disabled」。

  8. 執行下列命令以啟用服務:

    svcconfig 啟用 SvcName

    如果作業成功或錯誤訊息,服務組態程式會將「服務已啟用成功」寫入主控台。

    如果已成功啟用服務, 啟動類型 會設定為 「手動」。

  9. 執行下列命令以停止服務:

    svccontrol stop SvcName

    如果作業成功,服務控制程式會寫入「服務停止擱置中...」然後「服務已順利停止」至主控台。 否則,程式會將錯誤訊息寫入主控台。

    如果服務成功停止, 狀態 為空白。

    如果服務無法停止,服務控制程式會將錯誤訊息寫入事件記錄檔,其中包含失敗的函式名稱,以及失敗時傳回的錯誤碼。

  10. 執行下列命令來刪除服務:

    svcconfig delete SvcName

    如果作業成功或錯誤訊息,服務組態程式會將「服務已成功刪除」寫入主控台。

    如果已成功刪除服務,它就不會再顯示在 服務 應用程式中。 (請注意,如果您嘗試刪除未停止的服務,作業會成功,但 啟動類型 設定為 「已停用」,且服務專案會在系統重新開機時刪除,或使用 Task Manager 終止服務時刪除。)

使用服務