我在系统中列出了所有正在运行的进程的完整路径。我的应用程序在XP中正常运行,但在Vista中,它在访问MainModule.FileName时提供访问被拒绝的异常。 (由于UAC,我认为)。
foreach (Process process in Process.GetProcesses())
{
sProcess = process.ProcessName;
sFullpath = process.MainModule.FileName;
..
..
..
}
我找不到与UAC打交道的解决方案。任何线索??
答案 0 :(得分:2)
可能根本不是UAC。可能是您的进程是x32,正在查询的进程是x64,反之亦然。当Win32Exception出现“只有ReadProcessMemory或WriteProcessMemory请求的一部分已完成”时,进程.MainModule似乎窒息了“
可能是吗?
答案 1 :(得分:1)
在Windows 7或Vista上,您可以直接使用win api获取升级的进程路径而不会出现拒绝访问错误。
请参阅此链接:
答案 2 :(得分:0)
要添加到DJA的答案,Process.MainModule正在使用EnumProcessModules API:
如果目标进程中的模块列表已损坏或尚未初始化,或者由于加载或卸载DLL而导致模块列表在函数调用期间发生更改,则EnumProcessModules可能会失败或返回不正确的信息
因此,当目标进程不稳定时,您可能尝试使用此函数,获取ERROR_PARTIAL_COPY(299)。