2
为什么我总是得到|访问被拒绝|在调试期间异常?调试失败,但在其他情况下工作
foreach(Process p in Process.GetProcesses())
{
string module=p.MainModule.Filename;
}
无论它是什么过程,总是调用exeption。 但它工作,如果我刚开始没有调试。 我想通过/的方式获得流程的完整路径。
为什么我总是得到|访问被拒绝|在调试期间异常?调试失败,但在其他情况下工作
foreach(Process p in Process.GetProcesses())
{
string module=p.MainModule.Filename;
}
无论它是什么过程,总是调用exeption。 但它工作,如果我刚开始没有调试。 我想通过/的方式获得流程的完整路径。
访问被拒绝错误(确切地说是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实例时得到异常。