Странная проблема с .NET Windows Service - PullRequest
11 голосов
/ 27 июля 2010

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

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

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

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

net start blah.blah.exe «Недопустимое имя службы.»

... или пройдя через оснастку «Службы»... "Windows не удалось запустить службу" Blah Blah "на локальном компьютере. Ошибка 1053: служба не ответила на запрос запуска или управления своевременно."

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

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

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

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

Редактировать: Я должен был также упомянуть ... Единственное другое свидетельствопроблема в средстве просмотра событий Windows - два сообщения в системном журнале из диспетчера управления службами:

"Истекло время ожидания (30000 миллисекунд) в ожидании подключения службы Blah Blah.

«Служба Blah Blah не запустилась из-за следующей ошибки: Служба не ответила на запрос запуска или управления своевременно.»

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

Ответы [ 6 ]

8 голосов
/ 28 июля 2010

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

Разобраться в этом.

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

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

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

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

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

2 голосов
/ 28 июля 2010

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

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

То, что имя, которое вы дали службе в компоненте установки службы, которое вы добавили в visual studio, не соответствует вашим ожиданиям.

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

1 голос
/ 28 июля 2010

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

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

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

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

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

1 голос
/ 28 июля 2010

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

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

0 голосов
/ 15 ноября 2017

Возможно возникновение этой ошибки, когда

  • Ваш сервис зависит от другого сервиса / приложения
  • или из-за неверных настроек app.config

Обнаружена та же проблема, когда Entity Framework не удалось подключиться к серверу базы данных из-за отсутствия разрешения. Лучше добавить механизм регистрации ошибок глобального уровня в ваше приложение, чтобы легко отладить проблему. В некоторых случаях программа просмотра событий может не раскрывать точные детали.

0 голосов
/ 28 июля 2010

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

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

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

...