2012-02-02 9 views
2

У меня есть служба, которую я написал для выполнения партийных обязанностей, но требование - начать обработку в 16:00 и завершить ее обработку в 5 утра. Если есть работа по-прежнему обрабатывается, время нужно будет продлить до завершения задания.Как запустить и остановить службу Windows по расписанию?

Могу ли я обернуть звонок onstart в таймер или что? Я действительно не знаю, как это будет выглядеть, поскольку я привык к запуску и запуску сервисов до бесконечности (или до тех пор, пока не будут установлены баки с ящиками или необработанное исключение).

Я бы определенно оценил некоторые идеи о том, как достичь этого.

Редактировать: Мне нужна услуга, потому что я выполняю пакет SSIS через dtexec() и командный файл в C#. Должны произойти и другие события, такие как ведение журнала в dbase и управление очередями.

Каждая работа имеет разную длину, некоторые из них будут завершены через несколько минут, другие - 5 часов.

+6

Почему вы хотите остановить службу, а не просто прекратить ее обработку? –

+0

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

+0

Нет необходимости в услуге. Просто назначьте задачу. Он будет работать до конца –

ответ

1

Три варианта:

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

  2. Служат «постоянно», но спать в течение определенного промежутка времени между казнями. Это приведет к проблемам, если программа будет работать дольше, чем ожидалось.

  3. Установите сервис на 15 минут (или так) и проверьте, в какое время оно находится. Если это во время начального периода, запустите программу.

Первый и третий, пожалуй, лучшие варианты.

+0

Планировщик задач привлекателен, но мне интересно, может ли ваша служба работать за пределами времени выключения, когда у нее есть работа, которую она должна завершить. Как я уже сказал, это пакет SSIS, который я запускаю через dtexec в C#. Работа должна завершиться, даже если время отключения выходит за пределы 5 утра. Мне нравится вариант 3, лучший пока. –

4

Это похоже на задачу, которая лучше всего обрабатывается планировщиком задач Windows. Если вы не запускаете что-то вроде Win2K или XP, у него есть все необходимые настройки, которые необходимо запустить в определенное время, разрешите ему работать в течение ограниченного времени, он может запустить процесс под конкретными учетными данными (если вам нужно его запустить повышен), а также запускать, когда никто не вошел в систему.

И он имеет приятный удобный графический интерфейс для управления всем этим, без необходимости кодирования!

UPDATE

ОК, на основе ваших комментариев, что вам действительно нужно, это рабочий процесс. Что бы я сделал, разрабатывает каждую из отдельных задач в отдельном проекте (отдельный .exe или .dll в зависимости от ваших потребностей). А затем посмотрите и Windows Workflow Foundation и разработайте «контроллер» рабочего процесса, который можно использовать для запуска отдельных задач.

+0

Да, я согласен со всем, что ты сказал. Единственное ограничение не использовать его в моем случае - это то, что служба должна завершить обработку, даже если она превышает срок. Я уверен, что это невозможно сделать с TS. Поправьте меня, если я ошибаюсь. –

+0

Да, вы ошибаетесь. Я не уверен, какой смысл иметь «ограничение по времени», если вы на самом деле не собираетесь применять этот предел. Но да, вы можете выполнить задачу и просто позволить ей работать до тех пор, пока она не будет завершена, а затем она остановится, и все будет сделано. Я что-то упускаю? – CodingGorilla

+0

Приложение в основном очередь обработки заданий. Существуют смешанные задания с разными временами обработки. Некоторые останавливаются до 5 утра, а другие могут переноситься всю ночь, и в этом случае мы можем запускать только одно задание с 4 вечера до 5 утра. Если работа заканчивается в 4:59, обработка должна прекратиться и позволить нашим другим службам, работающим с этой БД, продолжать свою работу. Это цель срока. –

1

Я думаю, что служба должна бежать до бесконечности и проверить время, чтобы узнать, если это уже 4:00 вечера, и если да, начните ее работу, а когда 5 утра удастся, просто закончите и снова вернетесь в 16:00 ,

1

то, что вы ищете является scheduled job

если вы/должны/иметь обслуживание окон, вы используете Таймеры и установить таймер, чтобы проверить один раз (каждый раз, когда я использую 30 минут для такого рода вещи), и если время между 4:00 и 5:00, работайте.

+0

Мне нужно использовать сервис, потому что я обрабатываю процесс. Это в основном для запуска пакета SSIS через dtexec и пакетного файла. Пакет SSIS должен завершиться до завершения службы. –

1

Вы можете взглянуть на quartz.net, это хорошая библиотека планирования, которая делает такие вещи и может работать в процессе к вашим услугам.

+0

Собственно, это хороший набор инструментов. Я потратил время, чтобы прочитать, о чем все это. Я не знаю, буду ли я использовать его на этот раз, но +1 для этой идеи. –

Смежные вопросы