2012-05-07 8 views
1

실행중인 서비스를 중지하려고합니다. 제가 만든 콘솔 프로그램입니다. 이 내 코드입니다 :이 일이 결코서비스 중지

ServiceController sc = new ServiceController(ServiceName, "."); 
sc.Stop(); 

그때 중지로 전환하기 위해, 서비스 상태 기다려야하지만. StopPending이있는 것 같습니다. 결코 멈추지 않았습니다. Services.msc를 검사하면 중지 된 것으로 표시되고 taskmanager에서 프로세스가 사라졌습니다.

영원히 대기 중입니까? 내가 뭔가 잘못하고 있는거야? 거기에 뭔가 수정해야 할 경우에도 서비스 용 코드가 있습니다.

답변

5

내가 잘못하고 있니?

당신은 서비스를 중지 한 후 waiting을 시도 할 수 있습니다 :

sc.Stop(); 
sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(25)); 

WaitForStatus 메소드가 지정된 상태에 도달하는 서비스 또는 지정된 시간 초과가 반환하기 전에 만료 될 때까지 기다린 것입니다.

+0

저는 이미 기다리고 있습니다. Pending에서 변경되지 않는 것 같습니다. – Nicolai

+0

실제로, 이것은 작동하는 것처럼 보였다. 나는 while 루프를 사용하여 자신을 확인하면서 sc.status에게 질문했다. 나는 그것이 결코 보류 상태에서 바뀌지 않은 이유를 모른다. WaitForStatus로 변경하면 해결되었습니다. – Nicolai

+0

@ Nicolay, 아마도 상태가 캐싱되었습니다. 상태를 업데이트하는'sc.Refresh()'메소드가 있습니다. 그러나 WaitForStatus가 더 나은 솔루션입니다. – HugoRune