Эта проблема очень распространена для подписанных исполняемых файлов службы .NET: служба не запускается во время загрузки, но работает нормально при последующем запуске вручную. Использование ServiceBase.RequestAdditionalTime не имеет значения: фактически, пользовательский код вообще не выполняется до истечения времени ожидания запроса на запуск службы. Этот эффект еще более выражен на машинах без подключения к Интернету: в этом случае даже запуск службы вручную из SCM завершится неудачей.
Чтобы решить эту проблему, отключите проверку подписи Authenticode во время загрузки, чтобы создать свидетельство Publisher , добавив следующие элементы в файл .exe.config:
<configuration>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>
Свидетельство издателя - это малоиспользуемая функция безопасности доступа к коду (CAS): только если ваша служба полагается на условие PublisherMembershipCondition, ее отключение может вызвать проблемы. Во всех других случаях это устранит постоянные или периодические сбои при запуске, больше не требуя от среды выполнения дорогостоящих проверок сертификатов (включая поиск в списке отзыва).
Редактирование, июль 2010 г .: Для приложений, использующих версию .NET Framework версии 4.0, этот обходной путь больше не требуется.