Служба Windows не запускается (Ошибка 1053) - PullRequest
14 голосов
/ 13 сентября 2011

У меня есть служба Windows, которую я пытаюсь отладить.Теперь он не запускается, хотя текущий код работал.Ошибка:

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

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

Чтобы выделить ошибку, я попытался все закомментировать.Основной метод выглядит следующим образом:

TextWriter tt = new StreamWriter(@"C:\startup.text", true);
tt.WriteLine("Starting up the service");
tt.Close();

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
   { 
       new MyService()
   };

TextWriter tt2 = new StreamWriter(@"C:\startup.text", true);
tt2.WriteLine("Run...");
tt2.Close();

Он распечатывает «Запуск службы» и «Выполнить ...» в файл журнала.Я также раздели внутреннюю часть MyService, так что она пуста.В любом коде есть попытка / перехват, который теперь сводится к некоторым строкам журнала, как указано выше.Я никогда не вхожу в оператор catch, который бы его регистрировал.

Все в OnStart закомментировано:

protected override void OnStart(string[] args)
{
}

Так что я в основном вне идей.Я думал, что ошибка была в том, что метод Start никогда не завершается (или не завершается в течение 30 секунд).Есть ли другой метод, который вызывается?Любые идеи приветствуются.

Дополнительная информация: Конструктор в MyService пуст.Если я вставлю несколько строк Thread.Sleep (5000), потребуется больше времени, прежде чем появится сообщение об ошибке 1053.Кажется, что метод Main должен выйти (без ошибок).

Ответы [ 2 ]

14 голосов
/ 13 сентября 2011

Вам не хватает ServiceBase.Run вызов:

ServiceBase[] servicesToRun = new ServiceBase[]
                                { 
                                    new MyService() 
                                };
ServiceBase.Run(servicesToRun);

Также может быть хорошей идеей подписаться на уведомление о необработанных исключениях:

static void Main() {
    ...
    AppDomain.CurrentDomain.UnhandledException 
                                      += CurrentDomain_UnhandledException;
    ...
}

private static void CurrentDomain_UnhandledException(
                                                 Object sender, 
                                                 UnhandledExceptionEventArgs e) {

    if (e != null && e.ExceptionObject != null) {
        // log exception:
    }
}

И добавьте следующую попытку / catch в OnStart, потому что .NET / SCM проглатывает исключения:

protected override void OnStart(String[] args) {
    try {

    } catch(Exception e) {
        // log exception:
        throw;
    }
}
0 голосов
/ 06 апреля 2019

Хотя эта тема довольно старая, вот мой дополнительный ответ, так как он может помочь другим сэкономить время, когда я потратил несколько часов:

Ситуация

  • Служба Windows, написанная на C #, которая отслеживает каталог и отправляет проанализированное сообщение из файла в тему MQTT, отлично работает на Win10, а также во время коротких тестов на WinXP дома

  • В производственной среде, служба работает на Win10 нормально, на WinXP вылетает через несколько часов и не может быть перезапущена ( Не удалось запустить службу filemqttservice на локальном компьютере. Ошибка 1053: служба не ответила на запрос запуска или управления своевременно )

Решение

Очистить историю журнала событий!(Дох!) Мой сервис был слишком болтлив, чтобы заполнить буфер журнала событий за несколько часов.После очистки журнала событий служба снова запустилась.Конечно, я удалил все строки, выдающие сообщения из сервиса

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