SERVICE_ACCEPT_SHUTDOWN, SERVICE_ACCEPT_PRESHUTDOWN не работает - PullRequest
0 голосов
/ 27 июня 2019

Наш сервис позвонил SetServiceStatus с SERVICE_ACCEPT_SHUTDOWN.

Однако, когда мой компьютер выключается, я никогда не получаю никакого события SERVICE_CONTROL_SHUTDOWN.

Я прочитал столько документации по Windows или всего, что нашел в Интернете, сколько смог, однако яне нашел все равно работает.Связанную проблему можно найти здесь

VOID WINAPI MyMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
    gSvcStatusHandle = RegisterServiceCtrlHandlerEx(SVCNAME, SvcCtrlHandlerEx, nullptr);
    ...
    gSvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
    ...
    SetServiceStatus(gSvcStatusHandle, &gSvcStatus);
}

DWORD WINAPI SvcCtrlHandlerEx(DWORD dwCtrl, DWORD dwEventType,
                             LPVOID lpEventData,
                             LPVOID lpContext)
{
    qDebug() << "dwCtrl:" << dwCtrl; // I config qDebug() to write output to a file
    switch (dwCtrl) {
    case SERVICE_CONTROL_STOP:
    case SERVICE_CONTROL_SHUTDOWN:
        ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);

        // gently quit the application
        QCoreApplication::quit();
        SetEvent(ghSvcStopEvent);
        ReportSvcStatus(gSvcStatus.dwCurrentState, NO_ERROR, 0);
        return NO_ERROR;
    default:
        break;
    }
    return ERROR_CALL_NOT_IMPLEMENTED;
}

Я изменил

  • SERVICE_ACCEPT_SHUTDOWN на SERVICE_ACCEPT_PRESHUTDOWN
  • SERVICE_CONTROL_SHUTDOWN до SERVICE_CONTROL_PRESHUTDOWN

Ничего не изменилось.


Я изменил

  • SERVICE_ACCEPT_SHUTDOWN до SERVICE_ACCEPT_POWEREVENT
  • SERVICE_CONTROL_SHUTDOWN до SERVICE_CONTROL_POWEREVENT

Я могу получить SERVICE_CONTROL_POWEREVENT (1 событие при выключении, 2 события при запуске).

Однакоя хочу SERVICE_CONTROL_(PRE)SHUTDOWN событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...