Запуск службы Windows с ошибкой 1053
У меня есть служба Windows, которая не запускается, вызывая ошибку "Ошибка 1053: служба не отвечала на запуск или запрос управления своевременно".
Запуск службы в моем отладчике работает нормально, и если я дважды кликнул на .exe на удаленном компьютере, окно консоли появится и продолжит работать без проблем - я даже вижу сообщения журнала, показывающие, что программа обрабатывает все так, как должно быть.
Служба работала нормально, хотя это мой первый раз, лично, пытаясь развернуть его с последними изменениями, внесенными в программу. Я оценил эти изменения и не могу понять, как они могут вызвать эту проблему, особенно, поскольку все работает нормально, когда не запускается как служба.
Метод StartRoutine() для индексации сервиса пуст, поэтому он должен возвращаться "своевременно".
Я проверил журналы событий на компьютере, и он не дает никакой дополнительной информации, кроме того, что она не слышала от службы в 30-секундный требуемый временной интервал.
Так как он работает на моей машине и в качестве исполняемого файла с двойным щелчком, как я могу разобраться, почему он не работает как служба?
О, и это .NET 2.0, поэтому на него не должно влиять ошибка 1.1 Framework, которая проявила этот симптом (http://support.microsoft.com/kb/839174)
Коробка - это сервер Windows Server 2003 R2 с SP2.
Ответы
Ответ 1
Может быть несколько вещей, и это может помочь получить трассировку стека на машине, демонстрирующую проблему. Существует несколько способов сделать это, но дело в том, что вы должны увидеть, где это происходит в коде.
Вы можете сделать это с помощью удаленной отладки, но простая вещь может заключаться в том, чтобы просто регистрироваться в журнале событий или в журнале файлов, если вы есть это. Буквально, поместив "WriteLine" ( "At class:: function()" ) на части кода, чтобы увидеть, сделали ли вы это.
Это по крайней мере заставит вас смотреть в правильном направлении (что в конечном итоге является кодом).
Обновление
Подробнее об устранении проблем при запуске с помощью WinDbg см. в статье Microsoft Как отладить службы Windows.
Этот связанный вопрос содержит полезные способы отладки служб, написанных на .NET.
Ответ 2
Это ошибочная ошибка. Вероятно, это необработанное исключение.
Очистите обработчик OnStart(), затем попробуйте это в своем конструкторе...
public MainService()
{
InitializeComponent();
try
{
// All your initialization code goes here.
// For instance, my exception was caused by the lack of registry permissions
;
}
catch (Exception ex)
{
EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error);
}
}
Теперь проверьте EventLog в вашей системе на наличие ошибки приложения.
Ответ 3
Я согласен с Скоттом, самый простой способ узнать, что происходит, чтобы поместить некоторые следы в код запуска (возможно, он даже не приходит к вашему стартовому коду).
Если это не поможет, вы можете опубликовать свой код здесь, чтобы другие могли посмотреть.
Ответ 4
возможно, не хватает зависимости, попробуйте следующее:
- отмените регистрацию своего сервиса
- зарегистрируйтесь снова
Если сбой в регистре означает отсутствие модуля.
Ответ 5
Если StartRoutine пуст, вы, вероятно, начинаете его где-то в другом месте.
IIRC вам нужно запустить рабочий поток, а затем вернуться из StartRoutine.
Ответ 6
Одной из проблем, которые могут привести к этой ошибке, является то, что служба Windows, которая должна быть развернута, состоит из некоторой ошибки, то есть, это может быть простая ошибка авторизации или что-то еще, поскольку в моем случае я ссылался на некоторые папки и файлы для ведения журнала, которые были не существует, но при условии правильного пути этих файлов и папок он решил мою проблему.
Ответ 7
Я просмотрел все сообщения по этому вопросу, и ни один из ответов не решил проблему, поэтому я добавляю этот ответ, если это помогает кому-то другому. По общему признанию, это относится только к новой службе, а не к конкретному случаю.
Я писал службу прослушивания файлов. Как консольное приложение, он работал отлично. Когда я запускал ее как услугу, я получил ту же ошибку, что и выше. То, что я не знал (и многие из статей MSDN об услугах, как правило, не учитываются) заключается в том, что вам нужно, чтобы ваш класс выполнялся из ServiceBase.Run(YourClassName());. В противном случае ваше приложение будет выполняться и немедленно завершается, и поскольку оно завершается, вы получаете вышеприведенную ошибку, даже если не было ошибок или исключений. Вот ссылка на статью об этом. На самом деле обсуждается настройка вашего приложения для двойного использования - Консольное приложение и сервис: Создать комбо-командную строку/приложение для Windows
Ответ 8
У меня была эта проблема, и источником моей проблемы был файл конфигурации. Я отредактировал его в блокноте, и в блокноте добавлен один специальный символ, который заставляет службу не запускаться должным образом, потому что файл конфигурации был разрушен. Я видел этот особый символ в notepadd ++ и после его удаления служба начала успешно работать, как и раньше.
Ответ 9
В моем случае правильная платформа .NET не была установлена на сервере, на котором была установлена служба Windows.
Ответ 10
Еще одна причина: если вы скопируете DLL в режиме "отладки" в папку установки, эта проблема придет. Что вам нужно сделать, так это запустить проект в режиме "Release", скопируйте DLL или непосредственно в папку "Release", а не "Debug" папку и скопировать эту DLL в папку установки, она будет работать. Вы можете увидеть уменьшение размера DLL, оно не будет содержать никаких отладочных символов и т.д.