Странная проблема со службой Windows.NET

У меня есть две службы Windows, записанные в C# после тех же шаблонов и методологии.

Обе услуги были разработкой, протестированной против Windows 7 VM и QA, протестированного на Windows Server 2008 VM. Оба сервиса были установлены и много раз удалялись под этими тестовыми средами без проблемы, однако после установки в продуктивной среде (Windows Server 2008), один из этих двух сервисов отказывается запускаться.

Для установки сервисов, мы используем InstallUtil.exe с компонентами ServiceInstaller и ServiceProcessInstaller, присоединенными к сервису.

Судя по всему провальный сервис устанавливает успешно. InstallUtil.exe сообщает об успехе, и сервис появляется в Сервисном обрыве. Можно также определить местоположение сервиса в реестре под Вздором HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Blah. Однако, при попытке запустить сервис, Вы получаете следующее:

сетевой запуск blah.blah.exe "Сервисное название недопустим".

... или проходя Сервисный обрыв... "Windows не мог запуститься "И тому подобное" сервис на Локальный компьютер. Ошибка 1053: сервис не ответил на запуск или управлял запросом своевременно".

Я добавил некоторую регистрацию событий к конструктору класса обслуживания провальный сервис, но это, кажется, не называют.

Поскольку это - производственное поле, нет никакой Visual Studio на поле, и удаленная отладка вне рассмотрения.

Есть ли какой-либо другой способ для меня получить информацию об отладке на том, почему провальный сервис не запускается?

Есть ли какая-либо другая причина очевидного выхода, что я мог бы видеть этот вид проблемы?

Править: Я должен был также упомянуть.. Единственное другое доказательство проблемы в Windows Event Viewer является двумя сообщениями в Системном журнале от Диспетчера управления службами:

"Тайм-аут был достигнут (30 000 миллисекунд) при ожидании И тому подобное сервис для соединения.

"И тому подобное сервису не удалось запуститься из-за следующей ошибки: сервис не ответил на запуск или управлял запросом своевременно".

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

11
задан Community 23 May 2017 в 12:31
поделиться

5 ответов

Jeopardy Answer: «Как может недействительная настраиваемая конфигурация в сочетании с плохим глобальным обработчиком исключений проявиться в службе .NET Windows?»

Разобрался.

Основной причиной проблемы был недопустимый раздел пользовательской конфигурации в app.config. Мы используем настраиваемый раздел конфигурации для настройки службы из app.config, а сборка и пространство имен производного класса ConfigurationSection недавно изменились.

Как оказалось, наша производственная конфигурация искала определение настраиваемого ConfigurationSection в неправильной сборке, и исключение, выдаваемое при неспособности создать его экземпляр, скрывалось из-за ошибки, из-за которой исключения, обнаруженные на ранних этапах жизненного цикла службы, попытаться войти в пользовательский журнал, а не в журнал событий приложений. (Поскольку источник журнала событий не существует в настраиваемом журнале событий, это вызовет другое исключение из глобального обработчика исключений, и служба умрет в конструкторе.)

Это второе исключение нигде не регистрировалось, и мы только нашли это через проверку кода.

Решение состояло в том, чтобы исправить конфигурацию и изменить глобальный обработчик исключений, чтобы он пытался только записывать в журнал событий приложений, используя имя службы в качестве источника журнала событий. (InstallUtil регистрирует имя службы как источник журнала событий в журнале приложений.)

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

8
ответ дан 3 December 2019 в 09:18
поделиться

Это распространенная проблема. Какой код у вас в событии Start?

У вас должен быть только код, который активирует таймер при запуске службы. Это позволяет быстро завершить событие Start и уведомить контроллер. Если выполнение займет больше времени, вы получите полученную ошибку. Может быть какая-то причина (возможно, связанная с данными), почему это занимает больше времени в производстве.

Когда таймер тикает, выполните свой код и остановите таймер. Очевидно, также поместите все в try / catch и запишите исключения.

0
ответ дан 3 December 2019 в 09:18
поделиться

что вы пытаетесь сделать при запуске службы?

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

1
ответ дан 3 December 2019 в 09:18
поделиться

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

  1. Мне пришлось перезапустить services.msc, потому что я удалил службу, на которую, как он считал, есть ссылка. Однако, когда я запускал его, «служба была недействительной»

  2. . Если вы создаете службу из консольного приложения (чтобы ее можно было отлаживать), но забываете вернуть ее обратно в службу, она не будет Начало.

  3. Когда я использовал InstallUtil.exe, иногда он пытался установить несколько копий, поэтому я переключился на использование просто проекта установки.

Надеюсь, что это хоть как-то поможет.

1
ответ дан 3 December 2019 в 09:18
поделиться

Это могло быть возможно из сообщения об ошибке, которое вы описали

net start blah. blah.exe "Недействительное имя службы."

То, что вы дали сервису имя в компоненте установки сервиса, который вы добавили в Visual Studio, не то, что вы думаете.

У меня довольно много раз возникала эта проблема, когда разработчики неправильно называли службы в установках.

2
ответ дан 3 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: