Пользовательский сервис планировщика событий Windows - PullRequest
2 голосов
/ 23 декабря 2008

Мне нужно создать службу Windows, которая работает точно так же, как планировщик задач, в которой я могу настроить время, в которое он запускается, и он в основном просто вызывает класс .NET в это запланированное время (периодически). Каков рекомендуемый способ сделать это? Кроме того, любая информация по установке / удалению этой службы будет принята с благодарностью!

Обновление: использование планировщика заданий недоступно (требование клиента, что-то связанное с его стандартами ИТ). Это было и моим предложением, но оно не сработает.

Решение: Спасибо всем за ваши ответы, решение Quartz.Net особенно хорошо выглядит, однако я нашел следующее, которое имеет именно то, что мне нужно:

http://www.c -sharpcorner.com / UploadFile / ajifocus / AppScheduler05262006074807AM / AppScheduler.aspx? ArticleID = b52f76da-943f-4807-9675-869f135ef2cd

Ответы [ 8 ]

9 голосов
/ 25 декабря 2008

Вы можете встроить планировщик Quartz.Net в службу.

2 голосов
/ 23 декабря 2008

Если у вас есть доступ к блоку, почему бы просто не использовать планировщик задач Windows и вызывать функции из консоли exe. Намного проще, чем заново изобретать колесо.

1 голос
/ 14 декабря 2009

Если вы создаете систему планирования, вам гораздо лучше написать службу Windows. Даже при том, что их сложно отладить, если вы переместите все функциональные возможности из службы в классы помощника и агента службы, вы можете легко протестировать функциональность, не беспокоясь о сервисе.

Затем вы можете предоставить любую информацию, которую вам нужно предоставить, клиенту через службы WCF. Теперь они могут быть размещены в любом исполняемом файле, поэтому служба Windows работает отлично. Преимущество тактики обслуживания Windows в том, что вам не нужен рабочий стол. Запланированные задачи (или должны быть) предназначены для выполнения в фоновом режиме. Службы Windows - хороший подход к фоновым задачам.

Я смотрел сторонние системы планирования, открытые планировщики и quartz.net. Мы выбрали последнее. Если ваш бюджет может покрыть все расходы, посмотрите на системы планирования, такие как JAMS или другие.

1 голос
/ 09 апреля 2009

Вы можете попробовать .NET Task Scheduler http://TaskService.Codeplex.com. Этот проект позволяет запланировать запуск сборок .NET в любое время дня с различными типами повторений, такими как ежедневно, ежечасно, еженедельно, каждые 5 часов или каждый третий день.

1 голос
/ 25 декабря 2008

У меня раньше была такая же проблема, у планировщика задач есть небольшая проблема. Это никогда не может быть надежной заменой cron Linux. Однажды мне пришлось написать сервис, чтобы сделать именно это. У меня был System.Threading.Timer, работающий в 1-секундном цикле. Затем он проверяет события, которые нужно было запустить (внешний exe-файл) в соответствии с конфигурацией, которую я сохранил в XML-файле.

0 голосов
/ 25 декабря 2008

Очень важно понимать, что создание службы Windows довольно сложно сделать правильно. Это особенно актуально для продуктов Версии 6 и новее, потому что сервисы изолированы от рабочего стола. Вот несколько комментариев

  • Службы сложнее отлаживать, чем обычная программа в пользовательском режиме.
  • Службы не могут взаимодействовать с пользователем в V6 и более поздних операционных системах. Таким образом, вы не можете дать им консоль или заставить их всплывающие окна с сообщениями напрямую.
  • Связь со службами обычно осуществляется через удаленный вызов процедур или вне процесса COM. И то, и другое может быть сложным даже для на первый взгляд конкурирующих вещей.
  • Службы запускают необходимый пыл, поэтому они должны быть значительно более надежными и эффективными, чем другие исполняемые файлы.
  • В зависимости от контекста безопасности может быть сложно получить службу, которая может вызвать другие события в системе.

Вместо службы я бы порекомендовал "Деймон". Это будет небольшая программа со скрытым пользовательским интерфейсом - просто запустите ее при запуске, как и любое другое приложение. Он будет работать в контексте пользователя и может делать все, что может делать пользователь (что, вероятно, то, что вы хотите). Вы можете присвоить ему иконку в трее, если вам нужно, или использовать сигнал из одного из ваших других приложений, чтобы он показал его простой пользовательский интерфейс.

0 голосов
/ 25 декабря 2008

Извините, мой ответ не говорит вам, как это реализовать.

Почему ваш клиент запрещает использовать какую-либо встроенную функцию ОС, в то же время позволяя запускать ее клон?

Я думаю, что будет меньше усилий, чтобы убедить вашего клиента в том, что это чушь, чем воссоздание планировщика Windows в качестве стабильной службы. Помимо экономии времени, просто используя существующее, вы, вероятно, в конечном итоге найдете лучшее решение. Беспроигрышный для всех:)

0 голосов
/ 23 декабря 2008

О, их так много.

Я бы начал со стандартной службы Windows в .Net и использовал бы функцию «Свойства \ Настройки» для хранения моего запланированного времени (это действительно работает только один раз - более сложной конфигурации потребуется более одного раза) .

Я бы также включил строку, чтобы определить сборку / класс, который я хотел запустить в этой конфигурации, и убедиться, что сборка имеет класс, который либо унаследован от базового класса, либо реализует интерфейс, чтобы я мог загрузить его как известный тип и выполнить известный метод, называемый что-то вроде Execute ().

Или вы можете определить метод, который вы хотите вызвать, также в файле конфигурации и использовать рефлексию для вызова этого метода.

...