Подтвердить что ты не робот

Запуск службы Windows с ошибкой 1053

У меня есть служба Windows, которая не запускается, вызывая ошибку "Ошибка 1053: служба не отвечала на запуск или запрос управления своевременно".

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

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

Метод StartRoutine() для индексации сервиса пуст, поэтому он должен возвращаться "своевременно".

Я проверил журналы событий на компьютере, и он не дает никакой дополнительной информации, кроме того, что она не слышала от службы в 30-секундный требуемый временной интервал.

Так как он работает на моей машине и в качестве исполняемого файла с двойным щелчком, как я могу разобраться, почему он не работает как служба?

О, и это .NET 2.0, поэтому на него не должно влиять ошибка 1.1 Framework, которая проявила этот симптом (http://support.microsoft.com/kb/839174)

Коробка - это сервер Windows Server 2003 R2 с SP2.

4b9b3361

Ответ 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, оно не будет содержать никаких отладочных символов и т.д.