我开发了窗口服务。 我想知道如果服务被杀死我怎么能得到通知。 目前我正在收到通知,如果服务停止。
----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
通知。 请build议如果服务被杀死,我应该使用什么处理程序。
如果它被杀死了 它结束了。 立即。 你没有得到任何信号。
但是,如果您在任务管理器中选择了最新的Windows版本,则永远不会杀死一个进程。 他们会首先发送一个关闭的信号(就好像你已经按下了Alt-F4)到应用程序,给它一个优雅的关闭的机会。 只有在特定时间段内不关闭应用程序才会被终止。