Запуск службы Windows завершается с ошибкой 1053 - PullRequest
12 голосов
/ 27 апреля 2009

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

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

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

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

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

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

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

Это устройство Windows Server 2003 R2 с пакетом обновления 2 (SP2).

Ответы [ 10 ]

5 голосов
/ 05 августа 2011

Это вводящая в заблуждение ошибка. Это, вероятно, необработанное исключение.

Очистите ваш обработчик 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 в вашей системе на наличие ошибки приложения.

4 голосов
/ 27 апреля 2009

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

Вы можете сделать это с помощью удаленной отладки , но простая вещь может состоять в том, чтобы просто войти в журнал событий или файл журнала, если у вас есть. Буквально, помещая "WriteLine (" At class :: function () ") во все части кода, чтобы увидеть, сделали ли вы это там.

Это, по крайней мере, заставит вас смотреть в правильном направлении (что в конечном итоге и является кодом).

Обновление

См. Статью Microsoft Как отлаживать службы Windows для получения подробных сведений об устранении неполадок при запуске с использованием WinDbg.

Этот связанный вопрос описывает хорошие способы отладки сервисов, написанных на .NET.

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

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

1 голос
/ 27 апреля 2009

Если StartRoutine пуст, вы, вероятно, запускаете его где-то еще.

IIRC вам нужно запустить рабочий поток, а затем вернуться из StartRoutine.

1 голос
/ 27 апреля 2009

возможно, не хватает зависимости, попробуйте это:
- отменить регистрацию вашего сервиса
- зарегистрируйтесь снова

Если сбой в регистре означает отсутствие модуля.

1 голос
/ 27 апреля 2009

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

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

0 голосов
/ 08 декабря 2015

В моем случае правильная платформа .NET не была установлена ​​на сервере, на котором я устанавливал службу Windows.

0 голосов
/ 27 мая 2014

У меня была эта проблема, и источником моей проблемы был файл конфигурации. Я отредактировал его в блокноте, и в блокноте был добавлен один специальный символ, из-за которого служба не работала должным образом, потому что файл конфигурации был испорчен. Я увидел этот специальный символ в notepadd ++, и после его удаления служба начала работать успешно, как и предыдущая.

0 голосов
/ 08 января 2014

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

Я писал службу прослушивания файлов. Как консольное приложение, оно работало отлично. Когда я запускал его как сервис, я получал ту же ошибку, что и выше. То, что я не знал (и многие статьи MSDN об услугах удобно пропустить), так это то, что вам нужно, чтобы ваш класс выполнялся из ServiceBase.Run (YourClassName ()) ;. В противном случае ваше приложение будет выполнено и сразу же завершит работу, и, поскольку оно завершилось, вы получите ошибку выше, даже если ошибки или исключения не произошло. Вот ссылка на статью об этом. На самом деле обсуждается настройка вашего приложения для двойного использования - Консольное приложение и служба: Создание комбинированной командной строки / приложения службы Windows

0 голосов
/ 21 февраля 2011

Еще одна причина заключается в том, что если вы скопируете DLL в режиме «отладки» в папку установки, эта проблема возникнет. Что вам нужно сделать, это запустить проект в режиме «Release», скопировать DLL или напрямую сформировать папку Release, а не Debug Папка ,, и скопируйте эту DLL в папку установки, она будет работать. Вы можете увидеть уменьшение размера DLL, она не будет содержать символы отладки и тому подобное

...