주 서비스에서 간단한 TCP 하트 비트를 확인하는 모니터링 서비스 (Windows 서비스의 형태로)를 사용하는 프로젝트에서 작업하고 있습니다. 특정 시간 동안 하트 비트가 감지되지 않거나 주 서비스 프로세스가 전혀 감지되지 않을 때마다 새 서비스가 시작됩니다. 한 번에 하나의 주 서비스 만 실행되도록하기 위해 새 인스턴스를 시작하기 전에 현재 실행중인 모든 프로세스를 동일한 이름으로 닫습니다.Process.WaitForExit 메서드 Thows InvalidOperation 예외 Process.Close 후
I 다음 코드로부터 비롯 가졌다 문제 :
var processes = from p in Process.GetProcessesByName("Acme") select p;
foreach (var process in processes)
{
...
process.Close();
process.WaitForExit(10000);
if (!process.HasExited)
process.Kill();
}
가 발표 process.Close() 메소드는이 프로세스와 연관된 모든 자원은 WaitForExit() 메소드가 예외를 던진 때문이다. 나는 곧바로 메인 프로세스에서 클린업 메소드를 종료시키고 싶었 기 때문에 프로세스를 즉시 종료 (kill)하고 싶지는 않았다.
내 문제의 해결책은 process.Close() 대신에 관련된 모든 정리 메소드를 호출하고 WaitForExit() 메소드 이후까지 자원을 해제하지 않은 대신 process.CloseMainWindow()를 호출하는 것이 었습니다.
이 문제에 대한 좀 더 우아한 해결책이 있으면 알려 주시기 바랍니다.