Написание запланированной службы Windows в .NET

Я хочу написать службу Windows, которую пользователь может запланировать. т.е. пользователь может ежедневно запускать услугу с 9:00 до 18:00, или он может запускать ее каждую ночь, начиная с ночи 12 часов в ночное время до следующего дня утром 6 и т.д. Есть ли какая-либо из box.NET API, который поможет мне сделать это? Я знаю, что могу сделать это с помощью запланированных задач, но есть ли способ сделать это программно?

5 ответов

Мой первый ответ - это вопрос, почему услуга? Но что более важно, вопрос в том, почему бы не использовать мощный планировщик, предоставляемый операционной системой?

Тем не менее, служба Windows - это всего лишь поток, в котором работает ваше приложение. Вы можете отправить его в две части, первая - это сама служба, которая выполняется на таймере. Запуск службы может проверить значение реестра, чтобы определить, как часто он должен выполняться.

Вторая часть службы - это небольшое приложение для Windows, которое позволяет пользователю устанавливать расписание и, конечно же, записывать его в ранее упомянутое значение реестра.

Нет никакого специального API, который вам нужен.


У меня были хорошие результаты, используя Quartz.NET для выполнения запланированных задач внутри службы Windows. Вы можете делать все от простого планирования интервалов до графиков в стиле cron.


Если вы не хотите, чтобы пользователь имел дело с планировщиком задач, тогда вы должны написать программу, которая позволит им выбрать день и время для запуска программы, а затем вы программно настраиваете запланированную задачу для них, Таким образом, им никогда не нужно знать конкретно о том, какой процесс вы используете, и им также не нужно знать, как использовать планировщик задач. Они просто делают все это из вашего приложения.


Я реализовал некоторые автоматические службы (службы Windows, написанные на С#), используя алгоритм crontab для управления планированием. Шаблон является мощным и гибким. Мы можем создавать расписания в любое время, когда хотим, используя только выражение cron. Возможно, я ошибаюсь, но единственный график, который, как мне кажется, не охватывает крона, - это если мы хотим последний день месяца, но это никогда не требовалось для всех сервисов.

Я скопировал алгоритм cron из статьи в Интернете (с открытым исходным кодом Atif Aziz) и реализовал в своем классе утилиты, прекрасно работая годами.

Подробнее в блоге: алгоритм анализа синтаксиса CronTab

Ура!

Роберто


Если вы планируете его планировать, просто создайте консольную программу и добавьте код в программу установки, которая поможет пользователю настроить запланированную задачу в окнах.

licensed under cc by-sa 3.0 with attribution.