2016-12-01 5 views
0

종료 할 때 어댑터 DNS 설정을 복원해야하는 Topshelf C# 서비스가 있습니다. 내 시작/중지 방법은 잘 작동하고이 코드가 작동 : 그래서 그것을C# 서비스 InvokeMethod가 Windows 종료 중에 실패합니다.

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) 

: 심지어 나는 다음과 같은 오류를 기록 RequestAdditionalTime

로, 문제가, 그러나,

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

종료입니다 OS가 내 전화를 차단하고있는 것 같습니다. ManagementObject.InvokeMethod

나는 당황합니다. 이 문제를 해결할 방법이 있습니까? 시작할 때 내 서비스가 이상을 감지하고 복구하지만 너무 오래 걸립니다. 정상적으로 종료 할 수 있기를 정말로 바랍니다.

+0

답변을 찾을 수있는 것처럼 보입니다. http://stackoverflow.com/questions/5217246/how-to-delay-shutdown-and-run-a-process-in-window-service – Gurpreet

+0

고마워, 불행히도 그것은 그것을 커버하지 않습니다. 서비스 종료 방법은 잘 실행됩니다. OS 종료 때문에 서비스를 종료하지 않기 때문에 DNS를 설정하는 호출을 차단하는 OS입니다. – Rocky

+0

OS가 다시 돌아오고 서비스가 시작될 때 마커를 설정하면 DNS를 복원해야합니다. 어쨌든 기계가 꺼져있을 때 DNS를 재설정하지 못한다. – Gurpreet

답변

1

Rocky, 코드의 기능 요소를 다시 만들었지 만 (무슨 일이 벌어지고 있는지) 오류가 발생하지는 않습니다. DNSServerSearchOrder를 null로 설정하고 해당 관리 개체의 SetDNSServerSearchOrder 메서드에 제공합니다. https://github.com/paulsbruce/StackOverflowExamples/blob/master/PriorityShutdown/PriorityShutdown/MyService.cs

유일한 추가 권장 사항은 서비스의 종료 순서의 우선 순위를 변경하여 효과가 있는지 확인하는 것입니다. 이 스레드를 참조하십시오 : .NET Windows Services stopping order when the system shutdown

+0

와우! 정말 고마워. 나는 SetProcessShutdownParameters (0x3FF, 0x00000001)를 이해하지 못한다. 하고 있지만, 나는 그것을 시도 할 것이다. 현상금은 너의 것이 될거야, 나는 예측한다 ... – Rocky

+0

아직도 내 실수를 받고 있지만 계속 나에게 좋은 길을 주었다. 현상금은 당신 것입니다. 마지막으로 시스템 종료시 DNS를 설정할 때 내 서비스가 여전히 오류가 발생하는 이유를 파악할 수 있다면 다시 연락 드리겠습니다. – Rocky