gpt4 book ai didi

c++ - 如何在 Windows 服务程序中捕获 SERVICE_CONTROL_SHUTDOWN 代码

转载 作者:可可西里 更新时间:2023-11-01 09:33:07 30 4
gpt4 key购买 nike

我最近在编写 Windows 服务程序。

我在编程时遇到的问题是,当我在其上安装程序时,Windows 操作系统无法正常关闭。关闭系统需要很长时间。看来我的程序是问题的原因。

我试图在互联网上找到解决方案,我发现在我的代码中添加“SERVICE_CONTROL_SHUTDOWN”可以解决问题。我这样做了,但是我的程序没有捕捉到“SERVICE_CONTROL_SHUTDOWN”,我不知道为什么......

有谁知道为什么会这样......谁能告诉我如何解决它?谢谢。

我在下面放了一段我的代码。

// method that sets service status. 
void SvcSetStatus(DWORD dwState, DWORD dwAccept = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN )
{
SERVICE_STATUS ss;
ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
ss.dwCurrentState = dwState;
ss.dwControlsAccepted = dwAccept;
ss.dwWin32ExitCode = 0;
ss.dwServiceSpecificExitCode = 0;
ss.dwCheckPoint = 0;
ss.dwWaitHint = 0;


g_NowState = dwState;
SetServiceStatus(g_hSrv, &ss);

}

// method of service handler
void SvcHandler(DWORD fdwControl)
{

if (fdwControl == g_NowState)
{
return;

}

switch (fdwControl)
{
case SERVICE_CONTROL_PAUSE:

break;
case SERVICE_CONTROL_CONTINUE:

break;
case SERVICE_CONTROL_STOP:
ShutdownService(FALSE);
break;
case SERVICE_CONTROL_INTERROGATE:
break;
case SERVICE_CONTROL_PRESHUTDOWN:

ShutdownService(TRUE); //???
break;
case SERVICE_CONTROL_SHUTDOWN:

ShutdownService(TRUE); //service finalize function (parameter is for shutdown or not)

break;
default:
SvcSetStatus(g_NowState);
break;

}
}

最佳答案

The problem I faced with while programming is that Windows OS doesn’t turn off normally when I install my program on it. It takes too long time to turn off the system. It seems my program is the cause for the problem.

这通常意味着您在 SCM 停止/关闭请求期间没有正确报告状态。您没有显示 ShutdownService() 的代码,但鉴于您编写 SvcHandler() 的方式,请确保 ShutdownService() 调用SvcSetStatus(SERVICE_STOP_PENDING) 在服务停止过程中定期调用,并在服务完全停止后调用 SvcSetStatus(SERVICE_STOPPED)

此外,另一个可能导致挂起的原因是,如果您的服务已经为自己创建了顶级 HWND,并且它的窗口过程没有正确响应未处理的消息,例如通过调用 DefWindowProc()。在关闭期间,某些消息会广播到顶层窗口,即使在服务进程中也是如此,并且需要对其进行响应。

关于c++ - 如何在 Windows 服务程序中捕获 SERVICE_CONTROL_SHUTDOWN 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36193213/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com