Я разработал службу Win32 (SERVICE_WIN32_OWN_PROCESS
) на C ++ для Windows 10. Время от времени она не запускается со следующими сообщениями в журнале событий:
A истекло время ожидания ( 45000 миллисекунд) при ожидании подключения службы MyService.
Не удалось запустить службу MyService из-за следующей ошибки: служба не отвечает на запуск или управление запрос своевременно.
Какой тайм-аут здесь происходит?
Я знаю, что при запуске службы время ожидания составляет 30 секунд от начала исполняемого файла до вызова StartServiceCtrlDispatcher()
. У меня есть запись в журнале прямо перед звонком на StartServiceCtrlDispatcher()
, но я его не вижу. К сожалению, у меня нет никаких записей в журнале в момент запуска службы. В промежутке между запуском и StartServiceCtrlDispatcher()
у меня есть небольшая инициализация, но ничего, что я ожидал бы занять 30 секунд до конца sh.
Мой сервис никогда не достигает StartServiceCtrlDispatcher()
, и я не видел следов в журнале событий, что происходит сбой.
Итак, почему в сообщении об ошибке указано время ожидания 45 секунд, а не 30 секунд? Что означает этот тайм-аут?
Редактировать: На данный момент меня больше всего интересует, испытывали ли другие люди такой же тайм-аут и выяснили ли они причину. Мне нужно отладить мой код, но я надеюсь, что кто-то сможет указать направление, в котором я мог бы сосредоточиться на отладке. Позже мне может понадобиться указание c справки с моим кодом, когда я знаю, где искать: -)
Редактировать: Microsoft описывает много видов таймаута в своей документации API для сервисов. Но я не видел упоминания о 45-секундном таймауте, даже если я прочитал все вызовы API, которые я использую.
Примечание. Я не изменял тайм-ауты в системе / реестре, если такое возможно.
Редактировать: Примечания о моем сервисе.
- Проблема возникает у пользователей p c, к которым у меня нет прямого доступа.
- Моя служба запускается правильно большую часть времени, но когда происходит сбой, это может произойти во время обновления windows при загрузке, которое вызывает его.
- В виртуальной машине с отладочной версией моего сервиса занимает менее 2 секунд от запуска исполняемого файла до вызова StartServiceCtrlDispatcher (). Это звучит разумно. Значительно меньше 30 секунд и 45 секунд.
- Я пытался добавить задержку (сон) между запуском и StartServiceCtrlDispatcher () более 30 секунд. Это дало мне стандартное сообщение о тайм-ауте 30000 миллисекунд. Не 45000!
- Я попытался форсировать cra * sh между start и StartServiceCtrlDispatcher (). Это дало мне запись в журнале событий «Ошибка приложения» о cra sh и стандартное время ожидания 30000 секунд. Не 45000! На проблемных ПК Eventlog Я не заметил никаких «Ошибка приложения» при неудачном запуске.