Это сообщение давно, но я пишу это для будущих программистов, которые будут искать способ исправить.
У меня была та же проблема, и я потратил несколько часов, чтобы выяснить, что былопроблема.
Сообщение об ошибке:
Служба не ....
может быть вызвана при выполнении основной функции, которая передаетсяна 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
в коде выхода.