이 코드는 많은 수의 컴퓨터에서 예상대로 실행됩니다. 그러나 하나의 특정 컴퓨터에서는 WaitForExit()
에 대한 호출이 무시 된 것처럼 보이며 사실 프로세스를 종료 된 것으로 표시합니다. SO에 similar question 달리 처리가 호출되고 있음Process.WaitForExit이 서로 다른 컴퓨터에서 일치하지 않음
static void Main(string[] args)
{
Process proc = Process.Start("notepad.exe");
Console.WriteLine(proc.HasExited); //Always False
proc.WaitForExit(); //Blocks on all but one machines
Console.WriteLine(proc.HasExited); //**See comment below
Console.ReadLine();
}
주 (시험 이유) notepad.exe
에 있으므로 고장이 함께 놓여 어렵다 - 즉,이 제 2 서브 과정과 폐쇄 산란되지 않는다. 그렇다고하더라도 다른 모든 시스템에서 왜 작동하는지 설명하지는 못합니다.
문제가 발생한 컴퓨터에서 두 번째 호출 인 Console.WriteLine(proc.HasExited))
은 화면과 작업 관리자에서 메모장이 여전히 명확하게 열려 있어도 true
을 반환합니다.
기계에서 Windows 7 및 .NET 4.0을 실행 중입니다.
내 질문은; 특정 컴퓨터의 어떤 조건이 원인 일 수 있습니까? 무엇을 확인해야합니까?
편집 - 내가 지금까지/업데이트/아마 관련 정보를 시도한 것 :
- 다시 설치 .NET.
- 작업 관리자에서 모르는 모든 프로세스가 종료되었습니다.
- Windows가이 컴퓨터에서 아직 활성화되지 않았습니다.
- 의견에 충실 한 후, 나는
GetProcessesByName
을 사용하여 '기존'프로세스 ID를 얻으려고 시도했지만 단순히 문제가있는 컴퓨터에서 빈 배열을 반환합니다. 따라서WaitForExit
을 호출하기 전에도GetProcessesByName
을 호출하여 프로세스가 반환되지 않으므로 문제가WaitForExit
인 경우에도 마찬가지라고 말할 수 없습니다. - 문제가 발생한 컴퓨터에서 결과 메모장 프로세스의 ParentID는 코드가 수동으로 시작하는 메모장 프로세스의 ID입니다. 즉, 메모장은 자식 프로세스를 생성하고 자신을 종료합니다.
메모장이 열렸을 가능성이 있습니까? 그래서 하나 만들고, 하나만 죽이지 만, 여전히 오래된 메모장을 보았습니까? 'proc.WaitForExit()'는 새로운 프로세스를 생성하기위한 원래 코드의 권한이없는 등의 이유로 인해 프로세스가 생성되지 않거나 즉시 종료 된 경우 즉시 반환 될 수 있습니다. – oleksii
@oleskii, 아니요. 메모장은 "모든 사람이 알고있는"프로세스로만 사용됩니다.이 문제는 프로세스에 어떤 파일이 사용되는지에 관계없이 발생합니다. – Rotem
@oleskii "proc.WaitForExit()은 프로세스가 생성되지 않았거나 어떤 이유로 인해 즉시 종료 된 경우 즉시 반환 될 수 있습니다."- 프로세스가 실제로이 경우 종료되지 않겠습니까? – Rotem