2016-12-01 22 views
0

У меня есть служба TopShelf C#, которая должна восстанавливать настройки DNS адаптера при выходе. Мой стоп/старт методы работы просто отлично, и этот код работает:C# service InvokeMethod не работает во время выключения Windows

ManagementObject.InvokeMethod("SetDNSServerSearchOrder", DNS, null); 

Shutdown, однако, проблема, даже с RequestAdditionalTime

, когда я захожу следующее сообщение об ошибке:

2016-11-30 15:10:53,427 [7] TRACE MyDNSService - DNSService Shutdown command received. 
2016-11-30 15:10:53,677 [7] DEBUG MyDNSService - DNSService Error setting DNS: A system shutdown is in progress. (Exception from HRESULT: 0x8007045B) 

Так это появляется, что ОС блокирует мой вызов до ManagementObject.InvokeMethod

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

+0

похоже, что вы можете найти свой ответ здесь http://stackoverflow.com/questions/5217246/how-to-delay-shutdown-and-run-a-process-in-window-service – Gurpreet

+0

Спасибо, к сожалению, это не совсем. Метод shutdown службы выполняется отлично, это ОС, которая блокирует мой вызов, чтобы установить DNS из-за выключения ОС, а не отключения службы. – Rocky

+0

Как насчет того, чтобы установить маркер, когда ОС возвращается и когда начинается ваша служба, он должен восстановить DNS. cuz перезагрузка DNS ни к чему не приведет, когда машина выключена. – Gurpreet

ответ

1

Rocky, я только что заново создал функциональные элементы вашего кода (записывая, что происходит), но я не получаю ошибку. Я устанавливаю DNSServerSearchOrder на нуль и подаю его методу SetDNSServerSearchOrder объекта управления. https://github.com/paulsbruce/StackOverflowExamples/blob/master/PriorityShutdown/PriorityShutdown/MyService.cs

Моей дополнительной рекомендацией является то, что вы можете попробовать изменить приоритет выключения вашего сервиса, чтобы убедиться, что это имеет какой-либо эффект. См. Эту тему: .NET Windows Services stopping order when the system shutdown

+0

Whoa! Спасибо. Я не совсем понимаю, что SetProcessShutdownParameters (0x3FF, 0x00000001); делает, но я попробую это. Баунти будет твоей, я предсказываю ... – Rocky

+0

все еще получаю мою ошибку, но ты дал мне хороший путь для продолжения. Баунти - ваша. Я снова буду следить, если наконец смогу выяснить, почему мой сервис по-прежнему ошибочен при настройке DNS при завершении работы. – Rocky