Я хочу написать службу Windows, которую пользователь может запланировать. т. е. пользователь может выбрать запуск службы с 9:00 до 18:00 ежедневно или каждую ночь, начиная с 12 часов ночи до 6 часов утра следующего дня и т. д. box .NET API, который поможет мне это сделать? Я знаю, что могу сделать это с помощью запланированных задач, но есть ли способ сделать это программно?
Написание запланированной службы Windows в .NET
Ответы (5)
Мой первый ответ на вопрос, почему служба? Но что еще более важно, возникает вопрос, почему бы не использовать мощный планировщик, предоставляемый операционной системой?
Тем не менее, служба Windows — это просто поток, в котором работает ваше приложение. Вы можете отправить его двумя частями, первая — это сама служба, которая выполняется по таймеру. При запуске службы можно проверить значение реестра, чтобы определить, как часто она должна выполняться.
Второй частью службы будет небольшое приложение для Windows, которое позволит пользователю установить расписание и, конечно же, записать его в ранее упомянутое значение реестра.
Нет никакого специального API, который вам понадобится.
Я получил хорошие результаты, используя Quartz.NET для выполнения запланированных задач внутри службы Windows. Вы можете делать все, от простого интервального планирования до расписаний в стиле cron.
Если вы не хотите, чтобы пользователю приходилось иметь дело с планировщиком задач, вам следует написать программу, которая позволит ему выбрать день и время для запуска программы, а затем вы программно настроите для него запланированное задание. Таким образом, им никогда не нужно знать конкретно о том, какой процесс вы запускаете, и им также не нужно знать, как использовать планировщик задач. Они просто делают все это из вашего приложения.
Если вы собираетесь запланировать его, просто создайте консольную программу и добавьте в установщик некоторый код, который поможет пользователю настроить запланированное задание в Windows.
Я реализовал несколько автоматических служб (службы Windows, написанные на С#), используя алгоритм crontab для управления планированием. Модель мощная и гибкая. Мы можем создавать расписания на любое время, которое захотим, только используя выражение cron. Возможно, я ошибаюсь, но единственное расписание, которое, я думаю, cron не охватывает, — это если мы хотим последний день месяца, но это никогда не было требованием для всех служб.
Я скопировал алгоритм cron из статьи в Интернете (открытый код Атифа Азиза) и реализовал в своем служебном классе, прекрасно работавшем годами.
Подробнее см. в моем блоге: алгоритм анализа расписания CronTab
Ваше здоровье!
Роберто