Эта проблема очень распространена для подписанных исполняемых файлов .NET: служба не запускается во время загрузки, но работает нормально при запуске вручную. Используется ли ServiceBase.RequestAdditionalTime, не имеет значения: фактически, ни один пользовательский код не выполняется вообще до истечения времени ожидания запроса на запуск службы. Этот эффект еще более выражен на машинах без подключения к Интернету: в этом случае даже ручной запуск службы из SCM не удастся.
Чтобы решить эту проблему, disable the verification of the Authenticode signature at load time in order to create Publisher evidence, добавив следующие элементы в файл .exe.config:
<configuration>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>
Издатель доказательством является малопользованной безопасностью доступа к коду (CAS) особенность: только если вашей служба полагается на PublisherMembershipCondition, что приведет к его отключению. Во всех других случаях это приведет к тому, что постоянные или прерывистые сбои при запуске исчезнут, больше не требуя, чтобы среда выполнения выполняла дорогостоящие проверки сертификатов (включая поиск списков списков).
Редактировать, Июль 2010: Для приложений, использующих версию 4.0 .NET Framework, это обходное решение больше не требуется.
Хотя установка патча, где MS говорит, что он не протестирован, не звучит очень привлекательно для производственной системы ... –