На основании изменения Inbar Gazit в System.ServiceProcess будет происходить в 3,5 RTM пост, до .NET 3.5, событие OnStop не вызывалось во время выключения компьютера, поэтому для обработки этого события, ваш служба должна была бы переопределить метод OnShutdown (вам также нужно было бы реализовать событие OnStop), но его предполагалось изменить в .NET 3.5. Согласно Inbar, версия .NET 3.5 ServiceBase будет вызывать метод Stop во время завершения работы, но может быть безопаснее просто реализовать оба метода (с учетом расхождений между платформами).
Что касается исключений, то это будет зависеть от того, как ваш сервис (или сервисные компоненты) их обрабатывает. Служба не останавливается, если происходит необработанное исключение, происходит сбой. Таким образом, обработка этой ситуации полностью зависит от вас: может быть, вы убедитесь, что все методы имеют обработку исключений, возможно, вы добавили необработанный обработчик исключений в свой код и т. Д., Но вам нужно выбрать соответствующую стратегию здесь.