Не удается остановить службу с ошибкой ERROR_SERVICE_CANNOT_ACCEPT_CTRL - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь написать windows приложение-службу, оно работает нормально, но когда я пытаюсь его остановить, происходят странные вещи.

if (!ControlService(
    service,
    SERVICE_CONTROL_STOP,
    (LPSERVICE_STATUS)&ssp))
{
    //TODO: Log that can not send service a stop signal
    std::cout << ssp.dwCurrentState << std::endl;
    std::cout << GetLastError();
    CloseServiceHandle(service);
    CloseServiceHandle(SCManager);
    return false;
}

То, что GetLastError () показывает ERROR_SERVICE_CANNOT_ACCEPT_CTRL (1061 ) код ошибки и MSDN говорит, что эта ошибка может возникать только в том случае, если состояние процесса равно SERVICE_STOPPED, SERVICE_START_PENDING или SERVICE_STOP_PENDING, но ssp.dwCurrentState имеет значение SERVICE_RUNNING. Та же ошибка возникает при попытке остановить службу из диспетчера задач.

Что может вызвать такое поведение?

1 Ответ

1 голос
/ 22 марта 2020

Каждый звонок на SetServiceStatus() сообщает SCM, что контролирует, что ваш сервис готов принять. Вероятно, при вашем последнем вызове SetServiceStatus() установите dwControlsAccepted на 0, а не на маску разумных значений для работающей службы (SERVICE_ACCEPT_STOP как минимум).

Обновите вызов там, где вы установили dwCurrentState до SERVICE_RUNNING, так что dwControlsAccepted включает SERVICE_ACCEPT_STOP.

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