Истекло время ожидания (45000 миллисекунд) в ожидании подключения службы MyService - PullRequest
0 голосов
/ 31 марта 2020

Я разработал службу 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 Я не заметил никаких «Ошибка приложения» при неудачном запуске.
...