共用方式為


完整服務範例

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

建置服務

下列程序說明如何建置服務並註冊事件訊息 DLL。

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

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

    1. mc -U sample.mc
    2. rc -r sample.rc
    3. 連結 -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 建立登錄機碼,並將下列登錄值新增至此機碼。

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

     

測試服務

下列程式描述如何測試服務。

測試服務

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

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

    svc 安裝

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

    如果服務安裝成功,服務會顯示在 Services 應用程式中。 請注意,名稱 設定為 “SvcName”,DescriptionStatus 為空白,且 [啟動類型] 設定為 [手動]。

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

    svccontrol start 服務名稱

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

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

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

    svcconfig 顯示 SvcName

    服務組態程式會在作業成功時將「服務描述已成功更新」寫入主控台;否則,會顯示錯誤訊息。

    如果更新成功,[描述] 設定為 [這是測試描述]。

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

    svcconfig 查詢 SvcName

    服務組態程式會在作業成功時將服務組態資訊寫入主控台,否則會顯示錯誤訊息。

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

    svccontrol dacl SvcName

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

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

    svcconfig 停用 SvcName

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

    如果已成功停用服務,[啟動類型] 設定為 [已停用]。

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

    svcconfig 啟用 SvcName

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

    如果已成功啟用服務,[啟動類型] 設定為 [手動]。

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

    svccontrol stop SvcName

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

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

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

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

    svcconfig 刪除 SvcName

    如果操作成功,服務組態程式會將「服務已成功刪除」寫入主控台;否則,會顯示錯誤訊息。

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

使用服務