我开发了窗口服务。我想知道如果服务被杀,我怎么能收到通知。目前,如果服务停止,我会收到通知。
----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
。如果服务被杀,请建议我应该使用什么处理程序。
答案 0 :(得分:1)
如果它被杀了,就会被杀死。它结束了。立即。你没有得到任何信号。
然而最近的Windows版本永远不会只是 kill 一个进程,如果你在任务管理器中选择它。他们将首先向应用程序发送一个关闭信号(就像你按下了Alt-F4一样),让它有机会优雅地关闭。只有在指定的时间范围内没有关闭时,应用才会终止。