Служба Windows, которая будет работать каждый час

Я могу создать сервис окон и установить его.

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

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

Как я могу сделать это?

Редактирование: Этот сервис будет установлен на многих машинах, поэтому, я не хочу создавать запланированную задачу, говорят относительно 100 серверов.

6
задан DarthVader 7 April 2010 в 02:43
поделиться

6 ответов

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

Если вам нужно, чтобы ваш код был службой, но чтобы он "активировался" каждый час, проще всего было бы сделать вашу службу COM-объектом и запланировать простую задачу каждый час, которая вызывает jscript / vbscript, который создает ваш COM-объект и вызывает для него простой метод.

Альтернативой является использование любого из API ожидания, чтобы «тратить» час без использования циклов.

Обратите внимание, что вам также необходимо принять во внимание некоторые интересные проектные решения, которые зависят от вашего сценария:

  • как будет запускаться ваша служба, если она выйдет из строя или будет остановлена ​​пользователем?
  • если вы запустились. по прошествии более часа, следует ли вам снова бежать или вам нужно подождать, чтобы перейти к точному почасовому графику?
  • как вы отслеживаете время последней «активации», если часовой пояс или летнее время были изменены, пока вы не были активны?
  • ваша служба предотвращает переход компьютера в спящий режим на холостом ходу или при закрытой крышке ноутбука? Если нет, нужно ли вам будить компьютер в час, чтобы ваша служба работала по вашему расписанию?

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

12
ответ дан 8 December 2019 в 04:51
поделиться

Есть несколько вариантов.

  1. Можно было поспать час.
  2. Возможно, вам больше подходит запланированная задача, а не услуга.
3
ответ дан 8 December 2019 в 04:51
поделиться
Thread.Sleep(1000*60*60);
2
ответ дан 8 December 2019 в 04:51
поделиться

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

Управляемая оболочка планировщика задач может помочь вам настроить это программно; вы также можете найти в Google другие ресурсы.

3
ответ дан 8 December 2019 в 04:51
поделиться
Thread.Sleep(TimeSpan.FromHours(1));

код будет более читабельным

2
ответ дан 8 December 2019 в 04:51
поделиться

Thread.Sleep() решение сделает так, что ваш сервис будет запускаться с интервалом в один час, а не каждый час, т.е. каждая задача будет запускаться в 1 час + время на выполнение задачи. Рассмотрите возможность использования таймера в вашей службе. Это будет более надежным решением, поскольку вы сможете контролировать, когда запускать задачу, следить за ее выполнением и т.д. Помните, что каждое событие Timer будет выполняться в отдельном потоке, и если выполнение задачи занимает более одного часа, вам, возможно, придется подождать завершения первой задачи, чтобы избежать параллельных задач.

2
ответ дан 8 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: