Ответ 1
Попробуйте ServiceBase.Stop()
.
У меня есть служебное приложение, написанное на С#, и при определенных обстоятельствах я хотел бы, чтобы он завершил сам. Это произойдет после того, как служба будет работать некоторое время, поэтому это не произойдет в событии OnStart().
Все, что я прочитал до сих пор, говорит о том, что единственный безопасный способ прекращения службы - через диспетчер управления службами. Моя служба работает как локальная служба и не имеет права запускать или останавливать службы, поэтому я не могу получить доступ к SCM из самой службы. Есть ли другой способ самоограничения, продолжая играть по правилам SCM?
Попробуйте ServiceBase.Stop()
.
Если вы хотите прекратить работу службы, а не останавливать ее (возможно, потому, что служба поймала иначе необработанное исключение), вы можете использовать Environment.Exit(1)
(используйте другой код выхода, если хотите).
Windows обнаружит, что служба неожиданно прекратилась. Если служба настроена на восстановление, будет использоваться процедура восстановления, которая включает в себя параметры перезапуска службы, запуск программы или перезапуск компьютера.
Что произойдет, если вы просто отпустите все исполняемые потоки? Я могу представить три возможных результата:
EDIT: Я подозреваю, что этот ответ самый лучший, но я оставлю это (на данный момент) просто ради.
У вас нет службы в локальной службе. Запустите его под пользователем, который имеет право остановить службу.
Хотя идея самоограничивающих услуг не лучшая из идей. Только этот факт означает, что это должно быть приложение, а не служба.