Я хочу написать службу Windows, которую пользователь может запланировать. т.е. пользователь может ежедневно запускать услугу с 9:00 до 18:00, или он может запускать ее каждую ночь, начиная с ночи 12 часов в ночное время до следующего дня утром 6 и т. д. Есть ли какая-либо из box .NET API, который поможет мне сделать это? Я знаю, что могу сделать это с помощью запланированных задач, но есть ли способ сделать это программно?Запись запланированной службы Windows в .NET
ответ
Моим первым ответом является вопрос, почему услуга? Но что еще более важно, вопрос в том, почему бы не использовать мощный планировщик, предоставляемый операционной системой?
Сказанное говорит, что служба Windows - это всего лишь поток, в котором работает ваше приложение. Вы можете отправить его в две части, первая - это сама служба, которая выполняется по таймеру. Запуск службы может проверить значение реестра, чтобы определить, как часто он должен выполняться.
Вторая часть службы - это небольшое приложение для Windows, которое позволяет пользователю устанавливать расписание и, конечно же, записывать его в ранее упомянутое значение реестра.
Существует не какой-либо специальный API, который вам нужен.
Если вы планируете его планировать, просто создайте консольную программу и добавьте код в программу установки, которая поможет пользователю настроить запланированную задачу в Windows.
У меня были хорошие результаты, используя Quartz.NET для выполнения запланированных задач внутри службы Windows. Вы можете делать все от простого планирования интервалов до графиков в стиле cron.
Если вы не хотите, чтобы пользователь имел дело с планировщиком задач, вам следует написать программу, которая позволит им выбрать день и время для запуска программы, а затем вы программно настраиваете запланированную задачу для их. Таким образом, им никогда не нужно знать конкретно о том, какой процесс вы используете, и им также не нужно знать, как использовать планировщик задач. Они просто делают все это из вашего приложения.
Я реализовал некоторые автоматизированные службы (службы Windows, написанные на C#), используя алгоритм crontab для управления планированием. Шаблон является мощным и гибким. Мы можем создавать расписания в любое время, когда хотим, используя только выражение cron. Возможно, я ошибаюсь, но единственный график, который, как мне кажется, не охватывает крона, - это если мы хотим последний день месяца, но это никогда не требовалось для всех сервисов.
Я скопировал алгоритм cron из статьи в Интернете (с открытым исходным кодом Atif Aziz) и реализовал в своем классе утилиты, прекрасно работая годами.
Смотрите более подробную информацию в своем блоге: CronTab schedule parser algorithm
Ура!
Roberto