Может ли служба, написанная на .NET, самостоятельно завершать свою работу? - PullRequest
19 голосов
/ 16 февраля 2009

У меня есть служебное приложение, написанное на C #, и при определенных обстоятельствах я бы хотел, чтобы оно прекратило работу. Это произойдет после того, как служба некоторое время будет работать, поэтому в событии OnStart () этого не произойдет.

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

Ответы [ 4 ]

35 голосов
/ 16 февраля 2009

Попробуйте ServiceBase.Stop().

8 голосов
/ 15 июля 2010

Если вы хотите прекратить службу вместо ее остановки (возможно, из-за того, что служба обнаружила необработанное в противном случае исключение), вы можете использовать Environment.Exit(1) (используйте другой код завершения, если хотите).

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

5 голосов
/ 16 февраля 2009

Что произойдет, если вы просто дадите завершить всем выполняющимся потокам? Я могу представить три возможных результата:

  • SCM замечает и решает, что вы закончили соответствующим образом
  • СКМ замечает, думает, что вы умерли, и перезапускает вас
  • SCM не замечает и показывает, что все еще работает

РЕДАКТИРОВАТЬ: Я подозреваю, этот ответ действительно лучший, но я оставлю это (на данный момент) только ради интереса.

0 голосов
/ 16 февраля 2009

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

Хотя идея самоограниченных услуг не самая лучшая из идей. Один только этот факт означает, что это должно быть приложение, а не служба.

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