访问process.MainModule.FileName时访问被拒绝的异常

时间:2009-11-20 11:33:36

标签: c#

我在系统中列出了所有正在运行的进程的完整路径。我的应用程序在XP中正常运行,但在Vista中,它在访问MainModule.FileName时提供访问被拒绝的异常。 (由于UAC,我认为)。

  foreach (Process process in Process.GetProcesses())
{
    sProcess = process.ProcessName;
    sFullpath = process.MainModule.FileName; 
..
..
..
  }

我找不到与UAC打交道的解决方案。任何线索??

3 个答案:

答案 0 :(得分:2)

可能根本不是UAC。可能是您的进程是x32,正在查询的进程是x64,反之亦然。当Win32Exception出现“只有ReadProcessMemory或WriteProcessMemory请求的一部分已完成”时,进程.MainModule似乎窒息了“

可能是吗?

答案 1 :(得分:1)

在Windows 7或Vista上,您可以直接使用win api获取升级的进程路径而不会出现拒绝访问错误。

请参阅此链接:

Access denied while getting process path

How to Get Elevated Process Path in .Net

答案 2 :(得分:0)

要添加到DJA的答案,Process.MainModule正在使用EnumProcessModules API:

  

如果目标进程中的模块列表已损坏或尚未初始化,或者由于加载或卸载DLL而导致模块列表在函数调用期间发生更改,则EnumProcessModules可能会失败或返回不正确的信息

因此,当目标进程不稳定时,您可能尝试使用此函数,获取ERROR_PARTIAL_COPY(299)。