Служба AC #, которую я создал, иногда не запускается автоматически на виртуальных машинах, которые загружаются - мы видим запись "Время ожидания истекло при ожидании подключения службы" в журнале событий.
Основная проблема та же, что описана в этом похожем вопросе SO, но разница здесь в том, что у меня установлены параметры восстановления для службы для перезапуска службы при всех сбоях. Этот процесс восстановления не запускается, однако - когда это происходит, служба все равно должна быть запущена вручную после завершения загрузки.
Опция Recovery срабатывает только при серьезном сбое службы, а не при запуске?
Я использую log4net и вижу ноль записей журнала, когда это происходит, поэтому я не уверен, что какой-либо из моих авторских кодов выполняется до истечения времени ожидания (поэтому решения использовать ServiceBase.RequestAdditionalTime или SetServiceStatus WINAPI не будут иметь никакого эффекта).
Предполагая, что это какая-то основная проблема, связанная с тем, что платформа .NET или аналогичная структура запускается очень медленно (т. Е. Физический системный ресурс или конфликт ввода-вывода при одновременном запуске многих виртуальных машин), мне нужно будет создать облегченную службу сторожевого типа C++ для обнаружения этот вопрос и попытаться перезапустить службу после свершившегося факта?
Более подробная информация: эта служба работала на виртуальной машине, которая дважды перезагружалась для установки обновлений Windows. Служба запускалась нормально после первой перезагрузки - на основе операторов журнала прошло ~ 1 секунда между запущенным конструктором службы и началом обработчика OnStart, и служба завершилась запуском в течение еще 2 секунд. При второй перезагрузке вообще не было записей в журнале, только ошибка журнала "Истекло время ожидания", и после проверки служба не работала. Однако отдельная, но похожая служба .NET, которая успешно запустилась после обеих перезагрузок, во второй раз заняла гораздо больше времени - опять же на основе операторов журнала, ~ 0,7 с после первой перезагрузки и 6 секунд после второй.
(первоначально спросили на StackOverflow, было рекомендовано, я спрашиваю здесь)