У меня тоже была эта проблема. Как уже упоминалось в IDWMaster, решение заключается в использовании планировщика задач Windows. Не думайте, что это дешевый вариант - я бы сказал, что это лучше, чем услуга. Довольно много программ используют Планировщик заданий Windows для выполнения административных задач. Зачем? Сервисы, как вы хорошо знаете, не могут так хорошо взаимодействовать с рабочим столом - если вы, например, создали глобальный хук клавиатуры в сервисе, он не будет захватывать клавиши. Почему не нормальные ключи запуска реестра? Потому что, как вы также хорошо знаете, программы, требующие прав администратора, не могут автоматически запускаться от имени администратора с помощью ключей запуска реестра. Использование планировщика заданий Windows решает все эти проблемы.
Вот отличная библиотека, с которой приятно работать с планировщиком задач Windows в C #:
http://taskscheduler.codeplex.com/