Почему метод RequestAdditionalTime () не работает при перезапуске в Vista / 7? - PullRequest
7 голосов
/ 06 января 2010

Я проводил обширное тестирование службы Windows, которую писал в C # .Net 3.5. У меня возникают проблемы с получением Windows, чтобы у меня было достаточно времени для правильного завершения работы службы при перезагрузке или выключении компьютера, даже если я вызываю метод RequestAdditionalTime (), который должен обновить SCM и поддерживать работу службы. Мой код работает правильно, если я вручную остановлю службу, однако. Я прежде всего тестировал этот код в Windows Vista и Windows 7, после того как решил проверить код в Windows Xp, все работало отлично. Кто-нибудь знает, почему этот вызов не работает в Vista / 7? Я думаю, что мне нужно какое-то разрешение, чтобы не выключить систему, которое я получаю по умолчанию в Xp, но не в Vista / 7.

Ответы [ 2 ]

6 голосов
/ 06 января 2010

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

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

2 голосов
/ 06 января 2010

В случае отсутствия отключения RequestAdditionalTime () должен вызываться чаще, чем каждые 2 минуты:

    protected override void OnStop()
    {
        Thread.Sleep(60000);
        RequestAdditionalTime(180000);
        Thread.Sleep(60000);
        RequestAdditionalTime(180000);
        Thread.Sleep(5000);
    }

Обратите внимание, что, несмотря на название, параметром времени является общее запрошенное время отключения.

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