На самом деле, если у вас есть непредвиденное исключение, которое передается полностью на верхний уровень вашего сервиса, вы должны не продолжить обработку; войти и распространить это. Если вам действительно нужен «надежный» сервис, вам понадобится «сторожевой таймер», который перезапускает исходный сервис при его выходе.
Обратите внимание, что современные операционные системы действуют как сторожевой таймер, поэтому в большинстве случаев вам не требуется сервис сторожевого таймера (откройте вкладку «Восстановление» в свойствах вашего Сервиса). Исторически сложилось так, что критически важные службы имели бы вторую службу «сторожевого таймера», единственная цель которой - перезапустить реальную службу в случае сбоя.
Похоже, ваш дизайн может использовать планировщик; просто позвольте Windows позаботиться о части «один раз в день» и просто сделайте так, чтобы ваш сервис выполнял эту задачу один раз. Если это не удается, хорошо; Windows отвечает за его повторный запуск на следующий день.
И последнее замечание: этот уровень надежности в услуге редко требуется. В коммерческом коде я видел его только в нескольких антивирусных программах и программе сетевой фильтрации (которая должна была работать, иначе вся сетевая связь потерпит неудачу). Я сам выполнил пару программ «сторожевого пса», но они предназначались для таких клиентов, как автомобильные компании, которые потеряли бы тонн денег, когда их системы сборочных линий вышли из строя. В дополнение к программному сторожу эти системы также имели резервные источники питания, жесткие диски с возможностью горячей замены RAID и полную копию всей системы для использования в качестве автоматического перехода на другой ресурс.
Просто скажу: вы, возможно, захотите пересмотреть, насколько вам действительно нужно повысить надежность (учитывая, что 100% надежность невозможна; к ней можно приблизиться только по экспоненциальной стоимости).