как обрабатывать изменения времени для службы Windows - PullRequest
0 голосов
/ 06 февраля 2012

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

Вопрос

У меня такой вопрос: когда мой сервис находится в спящем режиме и кто-то решает изменить время, когда должен происходить сбор данных, каков наилучший способ уведомить службу об изменившемся времени?

Можно ли из моего графического интерфейса сказать Windows, чтобы перезапустить мои конкретные службы? Или я могу отправить это прерывание потока? Как бы вы это сделали?

1 Ответ

1 голос
/ 06 февраля 2012

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

Для этого вы можете использовать класс ServiceController:

ServiceController sc = new ServiceController("Simple Service");
if (sc.Status == ServiceControllerStatus.Stopped)
{
    sc.Start();
    while (sc.Status == ServiceControllerStatus.Stopped)
    {
        Thread.Sleep(1000);
        sc.Refresh();
    }
}

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

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