Почему метод RequestAdditionalTime () не работает при перезапуске в Vista/7?

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

3 ответов


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

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


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

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

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


2-минутная ссылка в ответе Саймона Бьюкена относится к моей Microsoft здесь: http://connect.microsoft.com/VisualStudio/feedback/details/96460/servicebase-requestadditionaltime-has-no-impact-on-start-timeout