Выключение службы VB.NET - PullRequest
1 голос
/ 12 мая 2009

У меня есть служба Windows VB.NET, которую я написал, и она отлично работает. В VB.NET есть переопределяемый метод OnStop (), который вызывается при остановке службы. Однако кажется, что он останавливается только в том случае, если кто-то действительно останавливает службу из окна консоли MMC служб.

У меня вопрос: есть ли событие или переопределяемый метод, который вызывается всякий раз, когда служба останавливается, независимо от того, как она была остановлена ​​(например, перезагрузка компьютера, произошла исключительная ситуация и завершение работы службы и т. Д ....)?

Ответы [ 3 ]

5 голосов
/ 12 мая 2009

Нет ни одного события для обработки всех этих событий. Большинство перечисленных вами событий можно рассматривать в индивидуальном порядке.

  • OnShutdown может быть переопределен, чтобы справляться с неожиданными событиями питания (завершение работы пользователя, перезагрузка и т. Д.)
  • Application.UnhandledException может использоваться для необработанных исключений

Обратите внимание, что вы не можете зависеть от этих событий, запускающих 100% времени. Есть ситуации, когда каждое событие не будет запущено. Например, события, связанные с питанием, не сработают, если я подойду и выдерну шнур питания. Ваш код должен учитывать отключение службы без предварительного уведомления.

0 голосов
/ 12 мая 2009

На основании изменения Inbar Gazit в System.ServiceProcess будет происходить в 3,5 RTM пост, до .NET 3.5, событие OnStop не вызывалось во время выключения компьютера, поэтому для обработки этого события, ваш служба должна была бы переопределить метод OnShutdown (вам также нужно было бы реализовать событие OnStop), но его предполагалось изменить в .NET 3.5. Согласно Inbar, версия .NET 3.5 ServiceBase будет вызывать метод Stop во время завершения работы, но может быть безопаснее просто реализовать оба метода (с учетом расхождений между платформами).

Что касается исключений, то это будет зависеть от того, как ваш сервис (или сервисные компоненты) их обрабатывает. Служба не останавливается, если происходит необработанное исключение, происходит сбой. Таким образом, обработка этой ситуации полностью зависит от вас: может быть, вы убедитесь, что все методы имеют обработку исключений, возможно, вы добавили необработанный обработчик исключений в свой код и т. Д., Но вам нужно выбрать соответствующую стратегию здесь.

0 голосов
/ 12 мая 2009

Вы можете переопределить OnShutdown для захвата событий выключения (перезагрузки) и OnStop для обработки событий выключения MMC.

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

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