2011-12-06 4 views
2

언제나 접근해야합니까 | 액세스가 거부되었습니다 | 디버그 중 예외가 발생 했습니까?디버그는 실패하지만 다른 경우 작동합니다

foreach(Process p in Process.GetProcesses()) 
{ 
    string module=p.MainModule.Filename; 
} 

예외 처리는 항상 호출됩니다. 하지만 디버깅을하지 않고 시작하면 작동합니다. 방법의 전체 경로를 /하고 싶습니다.

답변

3

더 이상 실행되지 않는 프로세스에 대한 참조를 쿼리하기 때문에 액세스가 거부되었습니다 (Win32Exception이 정확히 발생 함) 오류가 발생합니다. GetProcesses은 배열을 반환합니다. 목록이 반환 된 후 프로세스가 종료되면 프로세스를 쿼리하려고하면이 예외가 발생합니다.

디버깅없이 작동한다는 것은 단지 우연의 일치입니다.

재현하려면 시도해보십시오. 메모장을 시작하십시오. 다음 코드를 실행하십시오.

var processes = Process.GetProcesses(); 
Console.WriteLine("press enter"); 
Console.ReadLine(); 
foreach (var p in processes) Console.WriteLine(p.MainModule.FileName); 

"press enter"가 출력되면 메모장을 닫습니다. Enter 키를 누르면 Notepad의 Process 인스턴스를 쿼리 할 때 예외가 발생합니다.

관련 문제