Ошибка 1053: служба не ответила на запрос запуска или управления своевременно - PullRequest
59 голосов
/ 01 октября 2008

Я недавно унаследовал несколько приложений, которые работают как службы Windows, и у меня возникают проблемы с предоставлением графического интерфейса пользователя (доступного из контекстного меню в системном трее) для них обоих.

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

Мой код работает нормально в режиме отладки, и я получаю контекстное меню, и все работает правильно и т. Д.

Когда я устанавливаю службу через «installutil», используя именованную учетную запись (т. Е. Не локальную системную учетную запись), служба работает нормально, но не отображает значок в области уведомлений (я знаю, что это нормальное поведение, потому что я нет опции "взаимодействовать с рабочим столом").

В этом и заключается проблема - когда я выбираю опцию «LocalSystemAccount» и проверяю опцию «взаимодействовать с рабочим столом», служба запускает AGES без видимой причины, и я просто продолжаю получать

Не удалось запустить службу ... на локальном компьютере.

Ошибка 1053: служба не ответила на запрос запуска или управления своевременно.

Между прочим, я увеличил тайм-аут службы Windows с 30 секунд по умолчанию до 2 минут с помощью взлома реестра (см. http://support.microsoft.com/kb/824344, поиск TimeoutPeriod в разделе 3), однако запуск службы по-прежнему истекает.

Мой первый вопрос: почему регистрация «Локальная системная учетная запись» занимает на SOOOOO НАМНОГО БОЛЬШЕ, чем когда служба входит в систему не-LocalSystemAccount, вызывая тайм-аут службы Windows? в чем может быть разница между этими двумя, чтобы вызвать такое разное поведение при запуске?

Во-вторых, сделав шаг назад, все, чего я пытаюсь добиться, - это просто служба Windows, предоставляющая графический интерфейс для настройки, - я был бы весьма рад запустить ее с использованием учетной записи не-Local System (с именем user / pwd), если бы я мог заставить сервис взаимодействовать с рабочим столом (то есть иметь контекстное меню, доступное из системного трея). Возможно ли это, и если да, то как?

Будем благодарны за любые указатели на вышеуказанные вопросы!

Ответы [ 31 ]

2 голосов
/ 22 февраля 2011

Скопируйте DLL-версию выпуска или получите dll из режима выпуска, а не из режима отладки, и вставьте ее в папку установки, она должна работать

2 голосов
/ 01 октября 2008

Я хочу повторить комментарии mdb здесь. Не иди по этому пути. Ваш сервис не должен иметь пользовательского интерфейса ... «Нет взаимодействия с пользователем» похоже на определяющую функцию сервиса.

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

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

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

На вашем месте я бы отступил назад и спросил , почему это должна быть услуга ? И зачем нужно взаимодействие с пользователем ?

Эти два требования довольно несовместимы, и это должно вызывать тревогу.

2 голосов
/ 01 октября 2008

Установите отладочную сборку службы и присоедините отладчик к службе, чтобы увидеть, что происходит.

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

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

для отладки введите Thread.Sleep(1000) в main(). и поставить точку останова в следующей строке исполнения.

Затем запустите процесс и подключите отладчик к процессу во время его запуска. Нажмите f5 после того, как он достигнет точки останова. Будет сгенерировано исключение отсутствующей сборки или ссылки.

Надеюсь, это решит эту ошибку.

2 голосов
/ 04 сентября 2016

Один раз попробуйте запустить свой исполняемый файл. У меня была та же проблема, но когда я запустил ее напрямую, дважды щелкнув по exe-файлу, я получил сообщение о версии .Net framework, потому что я выпустил сервисный проект с каркасом, который не был установлен на целевой машине.

2 голосов
/ 02 мая 2014

У меня была эта проблема, заняло около одного дня, чтобы исправить. Для меня проблема состояла в том, что мой код пропустил «основное содержимое» и фактически выполнил пару строк, а затем закончил. И это вызвало ошибку для меня. Это консольное приложение C #, которое устанавливает службу Windows, как только она пытается запустить ее с помощью ServiceController (sc.Run ()), тогда это выдаст мне эту ошибку.

После того, как я исправил код для перехода к основному контенту, он запустил намеченный код:

ServiceBase.Run(new ServiceHost());

Тогда он перестал появляться.

Как уже говорили многие люди, ошибка может быть чем угодно, и решения, которые люди предоставляют, могут или не могут ее решить. Если они не решают ее (например, выпуск вместо отладки, добавление generatePublisherEvidence = false в вашу конфигурацию и т. Д.), То есть вероятность, что проблема связана с вашим собственным кодом.

Попытайтесь заставить ваш код работать без использования sc.Run () (т. Е. Сделать так, чтобы выполнялся код, который выполняла бы sc.Run ()).

1 голос
/ 26 октября 2017

Моя проблема возникла из-за того, что целевая платформа, указанная в конфигурации службы Windows, была

<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
 </startup>

и мой сервер, на котором я пытался установить службу Windows, не был поддержан для этой версии .Net.

Изменяя который, я смог решить проблему.

1 голос
/ 10 августа 2017

enter image description here

У меня ушло несколько часов, должен был увидеть просмотрщик событий get_AppSettings () .

Изменение конфигурации приложения вызвало проблему.

1 голос
/ 15 января 2013

Добавление 127.0.0.1 crl.microsoft.com в файл "Hosts" решило нашу проблему.

0 голосов
/ 21 марта 2017

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

Я следовал этому руководству от Microsoft:

  • открыть редактор реестра, запустить -> regedit
  • Найдите следующий раздел реестра: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Eventlog \ Application
  • Щелкните правой кнопкой мыши по подразделу приложения, укажите «Новый», а затем нажмите «Ключ».
  • Введите имя источника события, используемое в службе Windows, для имени ключа.
  • Закрыть редактор реестра.
...