应用程序验证工具 - 停止代码 - 服务

服务测试、检查是否正确使用 Windows 服务。 例如,服务正在正常启动和停止。 有关 Windows 服务的详细信息,请参阅 服务

以下停止代码包含在这组测试中。

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

可能的原因

很可能应用程序不是使用定义的 UNICODE 宏编译的,因此使用非 Unicode 接口。

应用程序验证程序显示的信息
  • 格式: -  API 名称 %ws
  • 参数 1 - 未使用。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: 服务
  • 停止 ID: USING_NON_UNICODE_API
  • 停止代码: 4000000
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

第二次调用 StartServiceCtrlDispatcher API

可能的原因

此 API 只能在服务 wmain 函数开始时调用一次。

应用程序验证程序显示的信息
  • 格式: -  API 名称 %ws
  • 参数 1 - SERVICE_TABLE_ENTRY 参数。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: 服务
  • 停止 ID: CTRL_DISPATCHER_CALLED_TWICE
  • 停止代码: 4000001
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

传递给 SetServiceStatus 的SERVICE_STATUS句柄无效

可能的原因

传递给 SetServiceStatus 的SERVICE_STATUS句柄无效。

应用程序验证程序显示的信息
  • 格式: -  API 名称 %ws
  • 参数 1 - SERVICE_STATUS_HANDLE value。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: 服务
  • 停止 ID: INVALID_SERVICE_STATUS_HANDLE
  • 停止代码: 4000002
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

正在从两个线程调用 SetServiceStatus

可能的原因

此 API 旨在以串行方式调用。

应用程序验证程序显示的信息
  • 格式: -  正在从 %ws 服务并发调用 API 名称 %ws
  • 参数 1 - LPSERVICE_STATUS传递的值。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: 服务
  • 停止 ID: SET_SERVICE_STATUS_RACE
  • 停止代码: 4000003
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

在服务处于START_PENDING状态时接受 STOP/SHUTDOWN 控件

可能的原因

大多数服务无法在初始化期间接受停止/关闭控制

应用程序验证程序显示的信息
  • 格式: -  服务名称: %ws dwControlsAccepted: %08X
  • 参数 1 - LPSERVICE_STATUS传递的值。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: 服务
  • 停止 ID: STOP_SHUTDOWN_ACCEPTED
  • 停止代码: 4000004
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

服务正在尝试无效状态转换

可能的原因

服务尝试执行无效状态转换或设置相同的状态参数

应用程序验证程序显示的信息
  • 格式: -  发现服务 %ws 正在尝试无效状态转换
  • 参数 1 - LPSERVICE_STATUS当前状态。
  • 参数 2 - LPSERVICE_STATUS新状态。
  • 参数 3 - Last SetServiceStatus 堆栈跟踪。
  • 参数 4 - 未使用。

其他信息
  • 测试层: 服务
  • 停止 ID: INVALID_STATE_TRANSITION
  • 停止代码: 4000005
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

服务正在尝试设置相同的状态参数

可能的原因

服务尝试设置相同的状态参数

应用程序验证程序显示的信息
  • 格式: -  服务 %ws 尝试设置相同的状态参数
  • 参数 1 - LPSERVICE_STATUS当前状态。
  • 参数 2 - LPSERVICE_STATUS新状态。
  • 参数 3 - Last SetServiceStatus 堆栈跟踪。
  • 参数 4 - 未使用。

其他信息
  • 测试层: 服务
  • 停止 ID: DUPLICATE_STATE_PARAMS
  • 停止代码: 4000006
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

服务在进入 STOPPED 状态后离开挂起的线程

可能的原因

声明 STOPPED 状态后,服务将离开挂起的线程

应用程序验证程序显示的信息
  • 格式: -  服务 %ws 正在泄漏线程
  • 参数 1 - 泄漏线程的线程 ID。
  • 参数 2 - Service Tag。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: 服务
  • 停止 ID: LEAKED_THREAD
  • 停止代码: 4000007
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

另请参阅

应用程序验证工具 - 停止代码和定义

应用程序验证程序 - 概述

应用程序验证工具 - 功能

应用程序验证工具 - 测试应用程序

应用程序验证工具 - 应用程序验证工具中的测试

应用程序验证工具 - 调试应用程序验证工具停止

应用程序验证工具 - 常见问题解答