Служба не ответила на запрос запуска или управления своевременно - PullRequest
3 голосов
/ 27 августа 2010

Я создал сервис в win32, c ++. Я могу создать службу, но когда я пытаюсь ее запустить, выдается следующая ошибка.

[SC] StartService FAILED 1053: Служба не ответила на запрос запуска или управления своевременно.

Каков наилучший способ выяснить причину, так как это сообщение об ошибке не передает ничего значимого

Ответы [ 5 ]

3 голосов
/ 30 ноября 2012

Это сообщение давно, но я пишу это для будущих программистов, которые будут искать способ исправить.

У меня была та же проблема, и я потратил несколько часов, чтобы выяснить, что былопроблема.

Сообщение об ошибке:

Служба не ....

может быть вызвана при выполнении основной функции, которая передаетсяна StartServiceCtrlDispatcherW - SERVICE_TABLE_ENTRY, возвращается сразу после попытки запустить ваш сервис.

Основная функция, которую запускает SC, не должна возвращаться, пока SC не скажет ей остановиться.

Кодбудет выглядеть следующим образом:

void CServiceManager::Start(DWORD _dwArgc, LPWSTR * _argv)
{
    // Your performing code.
    // ....

    ::SetServiceStatus(SERVICE_RUNNING); // Roughly

    // Prevent CServiceManager::Start from returning.
    ::WaitForSingleObject(YourExitEvent, 0); 
}

Также вы не должны забывать передать SERVICE_STOPPPED и вызвать SetEvent в коде выхода.

3 голосов
/ 27 августа 2010

Отладка сервисов сложна. В настоящее время я предпочитаю писать библиотеку классов, которая выполняет всю работу, службу, которая просто вызывает один метод из библиотеки классов, и тестовую систему (обычно консольное приложение), которая вызывает тот же метод. Таким образом, я могу запустить тестовый жгут в отладчике и устранить большинство ошибок.

Два сообщения, которые вы, как правило, получаете, когда ваша служба не запускается, - это сообщение, которое вы только что получили, и сообщение «оно началось, но затем остановилось», что обычно означает, что оно вызвало исключение. Ваш обычно подразумевает плохую петлю или слишком долгий сон, если вы пишете услугу «проснись и посмотри, не полно ли еще». Но на самом деле, запуск его под отладчиком из тестового жгута - лучший способ понять, что происходит.

1 голос
/ 27 августа 2010

Обратите внимание, что при выполнении длительной операции при запуске службы ошибка может быть из-за этого.SC ожидает 30 секунд до завершения операции запуска, а затем сообщает об ошибке.

0 голосов
/ 17 апреля 2018

У меня была эта проблема, когда я компилировал службу Windows, используя оригинальный MinGW (старый). Проблема была решена простым переходом на последнюю версию MinGW-64

РЕДАКТИРОВАТЬ: Оказалось, что это просто проблема со службой, не находящей необходимые библиотеки Mingw Компиляция с флагом -static также решила проблему

0 голосов
/ 27 августа 2010

Лучший способ получить основную причину - проверить значение SERVICE_STATUS_PROCESS.dwCheckPoint.Ваш сервис обновляет это, пока он находится в состоянии START_PENDING, и с помощью sc query вы можете опросить его из командной строки.

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