共用方式為


應用程式驗證器 - 停止代碼 - 服務

服務會測試、檢查 Windows 服務的適當使用方式。 例如,正在正確啟動和停止服務。 如需 Windows 服務的詳細資訊,請參閱 服務

下列停止代碼包含在這組測試中。

使用非 Unicode API (例如 RegisterServiceCtrlHandlerA,而不是 RegisterServiceCtrlHandlerW)

可能的原因

大部分的應用程式可能未使用定義的 UNICODE 宏進行編譯,因此會使用非 Unicode 介面。

應用程式驗證器顯示的資訊
  • 格式: -   API 名稱 %ws
  • 參數 1 -   未使用。
  • 參數 2 -   未使用。
  • 參數 3 -   未使用。
  • 參數 4 -   未使用。

其他資訊
  • 測試層: 服務
  • 停止識別碼: USING_NON_UNICODE_API
  • 停止程式碼: 4000000
  • 嚴重性: 錯誤
  • 一次性錯誤: 不
  • 錯誤報表: 打破
  • 記錄到檔案: 是的
  • 建立回溯: 是的

StartServiceCtrlDispatcher API 第二次呼叫

可能的原因

此 API 只在服務 wmain 函式開始時呼叫一次。

應用程式驗證器顯示的資訊
  • 格式: -   API 名稱 %ws
  • 參數 1 -   SERVICE_TABLE_ENTRY 參數。
  • 參數 2 -   未使用。
  • 參數 3 -   未使用。
  • 參數 4 -   未使用。

其他資訊
  • 測試層: 服務
  • 停止識別碼: CTRL_DISPATCHER_CALLED_TWICE
  • 停止程式碼: 4000001
  • 嚴重性: 錯誤
  • 一次性錯誤: 不
  • 錯誤報表: 打破
  • 記錄到檔案: 是的
  • 建立回溯: 是的

傳遞至 SetServiceStatus SERVICE_STATUS控制碼無效

可能的原因

傳遞至 SetServiceStatus SERVICE_STATUS控制碼無效。

應用程式驗證器顯示的資訊
  • 格式: -   API 名稱 %ws
  • 參數 1 -   SERVICE_STATUS_HANDLE 值。
  • 參數 2 -   未使用。
  • 參數 3 -   未使用。
  • 參數 4 -   未使用。

其他資訊
  • 測試層: 服務
  • 停止識別碼: INVALID_SERVICE_STATUS_HANDLE
  • 停止程式碼: 4000002
  • 嚴重性: 錯誤
  • 一次性錯誤: 不
  • 錯誤報表: 打破
  • 記錄到檔案: 是的
  • 建立回溯: 是的

從兩個執行緒呼叫 SetServiceStatus

可能的原因

此 API 是要以序列方式呼叫。

應用程式驗證器顯示的資訊
  • 格式: -   從 %ws 服務同時呼叫 API 名稱 %ws
  • 參數 1 傳遞的 -   LPSERVICE_STATUS 值。
  • 參數 2 -   未使用。
  • 參數 3 -   未使用。
  • 參數 4 -   未使用。

其他資訊
  • 測試層: 服務
  • 停止識別碼: SET_SERVICE_STATUS_RACE
  • 停止程式碼: 4000003
  • 嚴重性: 錯誤
  • 一次性錯誤: 不
  • 錯誤報表: 打破
  • 記錄到檔案: 是的
  • 建立回溯: 是的

當服務處於START_PENDING狀態時,會接受 STOP/SHUTDOWN 控制項

可能的原因

大部分服務在初始化期間都無法接受停止/關機控制

應用程式驗證器顯示的資訊
  • 格式: -   服務名稱: %ws dwControlsAccepted: %08X
  • 參數 1 傳遞的 -   LPSERVICE_STATUS 值。
  • 參數 2 -   未使用。
  • 參數 3 -   未使用。
  • 參數 4 -   未使用。

其他資訊
  • 測試層: 服務
  • 停止識別碼: STOP_SHUTDOWN_ACCEPTED
  • 停止程式碼: 4000004
  • 嚴重性: 警告
  • 一次性錯誤: 不
  • 錯誤報表: 沒有
  • 記錄到檔案: 是的
  • 建立回溯: 是的

SERVICE 正在嘗試不正確狀態轉換

可能的原因

服務嘗試執行不正確狀態轉換或設定相同的狀態參數

應用程式驗證器顯示的資訊
  • 格式: -   找不到嘗試無效狀態轉換的服務 %ws
  • 參數 1 -   LPSERVICE_STATUS目前狀態。
  • 參數 2 -   LPSERVICE_STATUS新狀態。
  • 參數 3 -   Last SetServiceStatus 堆疊追蹤。
  • 參數 4 -   未使用。

其他資訊
  • 測試層: 服務
  • 停止識別碼: INVALID_STATE_TRANSITION
  • 停止程式碼: 4000005
  • 嚴重性: 錯誤
  • 一次性錯誤: 不
  • 錯誤報表: 打破
  • 記錄到檔案: 是的
  • 建立回溯: 是的

SERVICE 嘗試設定相同的狀態參數

可能的原因

服務嘗試設定相同的狀態參數

應用程式驗證器顯示的資訊
  • 格式: -   服務 %ws 嘗試設定相同的狀態參數
  • 參數 1 -   LPSERVICE_STATUS目前狀態。
  • 參數 2 -   LPSERVICE_STATUS新狀態。
  • 參數 3 -   Last SetServiceStatus 堆疊追蹤。
  • 參數 4 -   未使用。

其他資訊
  • 測試層: 服務
  • 停止識別碼: DUPLICATE_STATE_PARAMS
  • 停止程式碼: 4000006
  • 嚴重性: 警告
  • 一次性錯誤: 不
  • 錯誤報表: 沒有
  • 記錄到檔案: 是的
  • 建立回溯: 是的

進入 STOPPED 狀態之後,SERVICE 會離開擱置中的執行緒

可能的原因

服務在宣告 STOPPED 狀態之後離開擱置中的執行緒

應用程式驗證器顯示的資訊
  • 格式: -   服務 %ws 正在流失執行緒
  • 參數 1 -   外泄執行緒的執行緒識別碼。
  • 參數 2 -   Service 標籤。
  • 參數 3 -   未使用。
  • 參數 4 -   未使用。

其他資訊
  • 測試層: 服務
  • 停止識別碼: LEAKED_THREAD
  • 停止程式碼: 4000007
  • 嚴重性: 錯誤
  • 一次性錯誤: 不
  • 錯誤報表: 打破
  • 記錄到檔案: 是的
  • 建立回溯: 是的

另請參閱

應用程式驗證器 - 停止程式碼和定義

應用程式驗證器 - 概觀

應用程式驗證器 - 功能

應用程式驗證器 - 測試應用程式

應用程式驗證器 - 應用程式驗證器內的測試

應用程式驗證器 - 偵錯應用程式驗證器停止

應用程式驗證程式 - 常見問題