Служба.NET завершается с ошибкой 1053 в Windows Server 2003 r2 sp2
У нас есть набор служб Windows.NET 2.0, установленных на компьютере с Windows Server 2003 R2. Они настроены для запуска в качестве учетной записи локальной системы, а режим запуска - "Авто". Все службы не работают с ошибкой 1053 "Служба не ответила на запрос запуска или управления своевременно".
Я вставил логирование в один из сервисов и выяснил, что проблема не в нашем коде. Ни одна строка кода не выполняется.
Кажется, что проблема с разрешениями кода.net на машине. Но проблема воспроизводится только на клиентской машине (два разных клиента с одинаковыми симптомами). В нашей среде разработчика и тестера мы не можем воспроизвести его.
Система для воспроизведения: ОС: Windows Server 2003 R2 SP2 32-битная чистая установка + предварительные требования к продукту: SQL Server 2005 Express SP2, .NET Framework 2 SP2 + наш продукт
Что это может быть, любые предложения?
обновление от 07.04.2011:
Файл с журналом ProcessMonitor с клиентского компьютера: http://dl.dropbox.com/u/8982352/Logfile.zip Имя процесса службы: ParsecServiceHost.exe
3 ответа
Наконец, сообщив об ответе, эта поддержка Microsoft помогла получить:
Эта проблема возникает из-за того, что управляемая сборка.NET Framework 2.0 с подписью Authenticode загружается дольше, чем обычно. Подпись всегда проверяется при загрузке управляемой сборки.NET Framework 2.0, имеющей подпись Authenticode.
Кроме того, загрузка управляемой сборки.NET Framework 2.0 может занять больше времени, чем обычно, из-за различных других параметров. Например, загрузка управляемой сборки.NET Framework 2.0 может занять больше времени, чем обычно, из-за конфигурации сети.
Вот Microsoft KB, которая описывает проблему и предоставляет исправление для.NET Framework 2.0. Но это исправление не устраняет проблему длительного времени загрузки, но добавляет возможность просто отключить отключение проверки подписи в.NET:), установив параметр generatePublisherEvidence в app.config.! Примечание: если у вас установлен.NET Framework SP2, исправление не требуется, просто установите параметр generatePublisherEvidence в app.config.
http://support.microsoft.com/kb/936707 - ИСПРАВЛЕНИЕ: запуск управляемого приложения.NET Framework 2.0 с подписью Authenticode занимает больше времени, чем обычно.
Чтобы решить эту проблему, вы можете использовать этот параметр конфигурации, чтобы отключить проверку подписи в управляемом приложении.NET Framework 2.0. Вы можете использовать этот параметр конфигурации в файле конфигурации приложения. Для этого добавьте следующий код в файл.exe.config для управляемого приложения.NET Framework 2.0:
<configuration>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>
Если ваше приложение размещено в IIS, измените одно из следующих: C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet.config C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
Примечание. На компьютерах x64 также необходимо изменить одно из следующих: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet.config C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
Когда служба работает без проблем на Win 7 / Vista, то я думаю, что проблема в вашем коде, например, в методе OnStart(). Обычно IO-операции не разрешены в этом методе, и будьте осторожны, используя потоки в этом методе.
Вы не должны объявлять какие-либо ресурсы в конструкторе службы, которые будут использоваться в OnStart()
метод обслуживания. По сути, Constructor запускается в первый раз, а затем содержит значения, которые будут использоваться в OnStart()
но потом после OnStop()
ресурсы высвобождаются, а затем тот же самый нельзя использовать снова. Просто переместите весь код реализации из конструктора в OnStart()
и он побежит.
Вот ссылка из MSDN для быстрого ознакомления: http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.onstart.aspx
В этом может быть еще одна проблема. Вы могли бы использовать отладочную сборку. Службы не работают в режиме отладки, поэтому для запуска службы следует использовать сборку выпуска.