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

时间:2017-11-15 16:05:31

标签: c++ windows service

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

----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。如果服务被杀,请建议我应该使用什么处理程序。

1 个答案:

答案 0 :(得分:1)

如果它被杀了,就会被杀死。它结束了。立即。你没有得到任何信号。

然而最近的Windows版本永远不会只是 kill 一个进程,如果你在任务管理器中选择它。他们将首先向应用程序发送一个关闭信号(就像你按下了Alt-F4一样),让它有机会优雅地关闭。只有在指定的时间范围内没有关闭时,应用才会终止。