OnStop () вызывается только тогда, когда службе фактически приказано остановиться. Это не включает, например, выключение системы, так как для этого есть отдельный метод для переопределения (называемый OnShutdown()
).
Что бы вы ни поместили в OnStop()
, скорее всего, это будет только отдельный метод, который можно вызывать как из OnStop()
, так и OnShutdown()
Что касается перехвата нечетного неожиданного исключения, я бы предложил заключить вызов ServiceBase.Run()
в try / catch с регистрацией в пункте catch. Это должно в значительной степени гарантировать вам регистрацию в случае исключений.