Подтвердить что ты не робот

Может ли служба, написанная на .NET, автоматически завершаться?

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

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

4b9b3361

Ответ 2

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

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

Ответ 3

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

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

EDIT: Я подозреваю, что этот ответ самый лучший, но я оставлю это (на данный момент) просто ради.

Ответ 4

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

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