我正在尝试获取使用.NET的正在运行的进程列表。我使用here发布的问题来做这件事。
using (Process p = Process.GetProcessById(pid))
{
var modules = p.Modules.Cast<ProcessModule>().Where(
m => m.ModuleName.StartsWith("mscor", StringComparison.InvariantCultureIgnoreCase));
if (modules.Any())
Console.WriteLine(string.Format("{0} used .NET", pid));
}
我以管理员身份运行此程序。但是对于某些程序(例如,软件保护程序),我得到以下异常。
Unhandled Exception: System.ComponentModel.Win32Exception: Access is denied
at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
at System.Diagnostics.NtProcessManager.GetModuleInfos(Int32 processId, Boolean firstModuleOnly)
at System.Diagnostics.ProcessManager.GetModuleInfos(Int32 processId)
at System.Diagnostics.Process.get_Modules()
at ConsoleApplication1.Program.Main(String[] args) in c:\Code\ConsoleApplication1\ConsoleApplication1\Program.cs:line
我在这里做错了什么?