Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Как обработать критическую ошибку при старте службы Windows?

#c_sharp #service


При старте службы windows возникает критическая ошибка требующая останова еще не
стартовавшей службы. Ошибку логирую. Но что делать с ней дальше? Как сообщить windows,
чтобы она не считала службу запущенной? Можно ли как то информировать пользователя
о том что служба не запущена?

Спасибо.
    


Ответы

Ответ 1



Если сервис не смог корректно запуститься - то достаточно просто остановить его из кода, вызовом Stop(): protected override void OnStart(string[] args) { // случилась ошибка? this.Stop(); } Он перейдет обратно в Stopped. Если при этом попытка запуска была инициирована пользователем - тому покажется стандартное сообщение вида The Service12 service on Local Computer started and then stopped. Some services stop automatically if they are not in use by other services or programs.

Ответ 2



Насколько я понял: У вас при инициализации службы происходит критическая ошибка. Вы с помощью try/catch её перехватываете, пишете сообщение в лог. В этот момент остановить службу вы не можете, так как она еще не запустилась. Возможные решения: Заведите переменную типа bool, и при вызове метода OnStart проверяйте её значение. В OnStart вы можете остановить службу. Я бы посоветовал вам не использовать код, который может привести к ошибке, в конструкторе. По возможности, постарайтесь перенести его в метод OnStart.

Комментариев нет:

Отправить комментарий