【发布时间】:2023-03-29 07:54:01
【问题描述】:
我正在尝试编写一个 Windows 服务应用程序,它运行得很好,但是当我尝试停止它时会发生奇怪的事情。
if (!ControlService(
service,
SERVICE_CONTROL_STOP,
(LPSERVICE_STATUS)&ssp))
{
//TODO: Log that can not send service a stop signal
std::cout << ssp.dwCurrentState << std::endl;
std::cout << GetLastError();
CloseServiceHandle(service);
CloseServiceHandle(SCManager);
return false;
}
GetLastError() 显示 ERROR_SERVICE_CANNOT_ACCEPT_CTRL(1061) 错误代码,MSDN 表示只有当进程状态为 SERVICE_STOPPED、SERVICE_START_PENDING 或 SERVICE_STOP_PENDING 时才会出现此错误,但 ssp.dwCurrentState 为 SERVICE_RUNNING。 当我尝试从任务管理器停止服务时,也会发生同样的错误。
什么会导致这种行为?
【问题讨论】:
-
服务处理
SERVICE_CONTROL_STOP的问题 -
GetLastError的返回值在您调用它时毫无意义。请仔细阅读documentation。