Наш сервис позвонил 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
событие.