我试图执行以下代码来按优先级对正在运行的进程进行分组,并且在linq查询的group by子句中出现Win32异常(“访问被拒绝”)。我在VS2010中以管理员权限运行了此代码。

var processesList = Process.GetProcesses();
var processQuerySet = from process in processesList
                      group process by process.PriorityClass into priorityGroup
                      select priorityGroup;
foreach (var priority in processQuerySet)
{
    Console.WriteLine(priority.Key.ToString());
    foreach (var process in priority)
    {
        Console.WriteLine("\t{0}   {1}", process.ProcessName, process.WorkingSet64);
    }
}

最佳答案

您不能访问所有进程的PriorityClass。我会写

ProcessPriorityClass GetPriority(Process p)
{
    try{
        return p.PriorityClass;
    }catch{
        return (ProcessPriorityClass)0;
    }
}


并称其为

group process by GetPriority(process) into priorityGroup

10-08 08:56