gpt4 book ai didi

c++ - 如果窗口服务被杀死,如何处理事件

转载 作者:行者123 更新时间:2023-11-30 05:07:38 25 4
gpt4 key购买 nike

我开发了窗口服务。我想知道如果服务被终止,我怎样才能得到通知。目前,如果服务停止,我会收到通知。

----service startup code---

inline void CServiceModule::Init(_ATL_OBJMAP_ENTRY* p, HINSTANCE h, UINT nServiceNameID, const GUID* plibid)
{
CComModule::Init(p, h, plibid);

m_bService = TRUE;
m_hInstance = h;

if(m_szServiceName.size()==0)
{
string strServiceName = GetServiceName();
m_szServiceName = strServiceName;
}

// set up the initial service status
m_hServiceStatus = NULL;
m_status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
m_status.dwCurrentState = SERVICE_STOPPED;
m_status.dwControlsAccepted = SERVICE_ACCEPT_PRESHUTDOWN;
m_status.dwWin32ExitCode = 0;
m_status.dwServiceSpecificExitCode = 0;
m_status.dwCheckPoint = 0;
m_status.dwWaitHint = 0;
}

---Handler----
inline void CServiceModule::Handler(DWORD dwOpcode)
{
switch (dwOpcode)
{
case SERVICE_CONTROL_SHUTDOWN:
case SERVICE_CONTROL_STOP:
SetServiceStatus(SERVICE_STOP_PENDING);
PostThreadMessage(dwThreadID, WM_QUIT, 0, 0);
break;
case SERVICE_CONTROL_PAUSE:
break;
case SERVICE_CONTROL_CONTINUE:
break;
case SERVICE_CONTROL_INTERROGATE:
break;
/* case SERVICE_CONTROL_SHUTDOWN:

break;*/
default:
LogEvent(_T("Bad service request"));
}
}

当服务停止时,我收到通知 SERVICE_CONTROL_STOP。如果服务被终止,请建议我应该使用什么处理程序。

最佳答案

如果它被杀了,它就被杀了。它结束了。立即地。你收不到任何信号。

但是如果您在任务管理器中选择进程,最新的 Windows 版本绝不会杀死进程。他们将首先向应用程序发送一个关闭信号(就好像您按下了 Alt-F4),让它有机会优雅地关闭。应用程序只有在指定时间段内未关闭时才会终止。

关于c++ - 如果窗口服务被杀死,如何处理事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47312093/

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