Запустите службу Windows в определенное время - PullRequest
2 голосов
/ 04 ноября 2011

Можно ли настроить службу Windows для запуска в определенное время?

Пример

From 8:00 am to 5:00pm run process 
From 5:00 pm to 8:00am run process

Этот процесс может выполняться ежедневно, еженедельно или в течение одного дня.

Пожалуйста, дайте мне знать, ваши мысли

Ответы [ 4 ]

6 голосов
/ 04 ноября 2011

Как правило, если это ваше требование, вам лучше написать простое консольное приложение, а затем использовать Windows Task Scheduler , чтобы запланировать его при необходимости.

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

3 голосов
/ 02 февраля 2012

Я столкнулся с подобной ситуацией, когда мне пришлось разработать сервис, который делал бы что-то только во время торговли, то есть с 11:00 до 15:00 ежедневно в этом конкретном случае.Это оставалось бы без дела остаток дня.Я делюсь тем, что я сделал в моем случае.Я не уверен, будет ли это полезно для вас, но я надеюсь, что это будет.

Две переменные, поддерживающие время начала и время окончания

TimeSpan StartingTime = new TimeSpan(
                             Int32.Parse(
                               ConfigurationManager
                                  .AppSettings["StartingTimeHour"]), 
                             Int32.Parse(
                               ConfigurationManager
                                   .AppSettings["StartingTimeMinute"]), 0);
TimeSpan EndingTime = new TimeSpan(
                             Int32.Parse(
                               ConfigurationManager
                                   .AppSettings["EndingTimeHour"]), 
                             Int32.Parse(
                               ConfigurationManager
                                   .AppSettings["EndingTimeMinute"]), 0);
//Starting time and Ending time may change in future. So I used app.config 
//instead of fixing them to (11,0,0) and (15,0,0) respectively

Метод проверкивремя торговли

public bool TradingTime()
{                        
    TimeSpan CurrentTime = DateTime.Now.TimeOfDay;
    return ((CurrentTime > StartingTime) && (CurrentTime < EndingTime));            
}

Тогда, где необходимо проверить время и выполнить что-то в зависимости от этого:

while (TradingTime())
{
    //do whatever required
}
2 голосов
/ 04 ноября 2011

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

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

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

0 голосов
/ 15 июля 2014

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

Пример службы запуска:

net start MyService

Пример службы остановки

net stop MyService
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...