2011-12-06 42 views
2

为什么我总是得到|访问被拒绝|在调试期间异常?调试失败,但在其他情况下工作

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

无论它是什么过程,总是调用exeption。 但它工作,如果我刚开始没有调试。 我想通过/的方式获得流程的完整路径。

回答

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键时,你会在尝试查询记事本的Process实例时得到异常。

相关问题