Вы можете использовать SCM для отключения вашего сервиса изнутри самого сервиса:
System.ServiceProcess.ServiceController svc = new System.ServiceProcess.ServiceController("NameOfYourService");
svc.Stop();
Edit:
Другим вариантом является вызов ServiceBase.Stop()
в вашем сервисе - если у вас есть доступ к экземпляру производного класса ServiceBase
, который был бы более чистым способом - во многих случаях это было бы громоздко, хотя необходимость обойти эту зависимость.
Если у вас есть неперехваченное исключение, я лично позволю сервису аварийно завершить работу (или зарегистрирую его, а затем throw
), что оставит сообщение в журнале событий с подробным описанием причины прекращения. Если вам абсолютно необходимо, вы можете поймать исключение, а затем позвонить ServiceBase.Stop()
.