Подтвердить что ты не робот

"Тайм-аут был достигнут в ожидании подключения к службе" после перезагрузки

У меня есть специальная служба Windows, которую я запускаю на нескольких виртуальных машинах Hyper-V. Виртуальные машины перезагружаются пару раз в час в рамках некоторых автоматизированных тестов. Служба настроена на автоматический запуск и почти все время, она начинается нормально.

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

Таймаут был достигнут (30000 миллисекунд) в ожидании подключения службы "Мое имя службы".

Когда это произойдет, я могу запустить службу вручную или перезапустить снова, и служба начнет нормально.

Я не могу понять, что 30-секундный тайм-аут не появляется в моем коде. В первой строке моего метода сервиса OnStart() мой журнал журнала "Start..." записывает журнал журнала log4net. Когда служба не запускается, я даже ничего не регистрирую вообще, что указывает на то, что либо log4net не может регистрироваться по какой-либо причине, либо тайм-аут происходит до вызова OnStart().

Служба работает на разных операционных системах: от XP вплоть до Win7 и 2008R2, и я знаю, что установка службы для отложенного запуска может решить эту проблему для Vista и позже, но это похоже на взлом.

Я не смог удаленно отлаживать это из-за того, что это происходит с периодичностью и во время запуска системы, и я в недоумении относительно дальнейших способов попытаться выяснить, что происходит. Любые идеи?

4b9b3361

Ответ 1

Возможно, вам стоит взглянуть на этот пост, он не идентичен вашей ситуации, но решение действительно предлагает надежные советы по службам Windows и функциям запуска.

Ответ 2

Моя догадка - и все, что есть, - это то, что диск во время запуска сильно врезается, до того момента, когда сама платформа .NET Framework не запускается за 30 секунд, которую Windows выделяет для запуска служб.

Обходным решением может быть установка службы для запуска вручную, а затем запись очень маленькой службы-заглушки в неуправляемом коде (например, С++, Delphi) для запуска службы.

Другим подходом может быть запуск службы удаленно с другой машины. Команда sc должна хорошо выполнять работу.

Ответ 3

Для чего это стоит, я обнаружил, что получил это сообщение (почти сразу после запуска службы), потому что у меня не было версии 4.5 платформы .NET, установленной на целевой машине. Я откатил версию, используемую для версии 4.0 (которая уже была установлена ​​на целевой машине), и служба работала, как ожидалось.

Ответ 4

Я видел эту ошибку в средстве просмотра событий при попытке установить службу с помощью powershell.

Проблема заключалась в том, что у меня были разные значения для "Имя службы" и "Отображаемое имя службы" в моей статье powershell script тем, которые я указал в файле program.cs моего Консольного приложения.

Ответ 5

Я думаю, что, возможно, также нашел, что еще один фактор, способствующий этому типу, не начинается с ошибки перезагрузки.

Похоже, что если в Журнале событий Windows установлено значение Overwrite Events > 7days.. size 512kb. Но в этом окне произошла большая активность, затем журнал событий эффективно заполнен, потому что он не может перезаписать количество события, созданные внутри этого таймфрейма. Если вы установите для журнала событий гораздо больший размер ИЛИ для перезаписывания по мере необходимости, вы не столкнетесь с этой проблемой.

Ответ 6

Моя проблема с той же ошибкой состояла в том, что установка .Net на сервере работала некорректно.

Чтобы понять это:

Я сделал небольшое консольное приложение с идентичной логикой как исполняющий сервис, и я сделал попытку по всему фрагменту кода, сбросив все это на консоль.

Не знаю, почему информация не пузырилась, но мы увидели ценные сообщения о ошибках Framework, которые мы бы никогда не видели.

Ответ 7

У нас такая же проблема на сервере Windows 2016.

Исправление, которое, кажется, работает, - это изменение пользователя, при котором служба, запущенная с учетной записи локальной службы, локальному администратору (не уверен, в чем причина).