【问题标题】:Access denied exception while accessing process.MainModule.FileName访问 process.MainModule.FileName 时访问被拒绝异常
【发布时间】:2009-11-20 11:33:36
【问题描述】:

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

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

我没有找到处理 UAC 的解决方案。有什么线索吗??

【问题讨论】:

标签: c#


【解决方案1】:

它可能根本不是 UAC。可能您的进程是 x32,而被查询的进程是 x64,反之亦然。 process.MainModule 似乎在发生 Win32Exception 时窒息,“只有部分 ReadProcessMemory 或 WriteProcessMemory 请求已完成”

可以吗?

【讨论】:

  • 我今天遇到了同样的问题。似乎将目标平台设置为 Any 为我解决了这个问题。
  • 当 Target 是 x86(使用一些无法在 64 位模式下工作的 32 位 dll)并且应用程序在 x64 上运行时,是否可以克服这个问题?
【解决方案2】:

为了补充 DJA 的答案,Process.MainModule 正在使用 EnumProcessModules API:

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

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

【讨论】:

    猜你喜欢
    • 2012-05-19
    • 2014-11-19
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2012-11-15
    • 2020-04-24
    相关资源
    最近更新 更多