.net 如何枚举32位进程';从64位应用程序中删除模块

.net 如何枚举32位进程';从64位应用程序中删除模块,.net,winapi,dll,c#-2.0,.net,Winapi,Dll,C# 2.0,我有密码: foreach (var process in Process.GetProcesses()) { if (process.ProcessName.ToLowerInvariant().StartsWith("iexplore")) { foreach (ProcessModule module in process.Modules) { string descr = m

我有密码:

        foreach (var process in Process.GetProcesses()) {
            if (process.ProcessName.ToLowerInvariant().StartsWith("iexplore")) {

                foreach (ProcessModule module in process.Modules) {
                    string descr = module.FileVersionInfo.FileDescription;
                    MessageBox.Show(module.FileName);
                }
            }
        }

我的应用程序设置为“任意CPU”配置,因此它应该在我的Win7 x64上作为64位进程运行。我试图枚举iexplore.exe的模块(32位版本)。我的问题是如何从64位应用程序枚举32位应用程序的模块?它只返回WoW DLL。

我的应用程序中也有同样的问题,尽管我认为您的问题是错误的(请参阅may对您的问题的评论)

实际上,如果您自己的进程是64位进程,则无法在64位Windows上枚举32位进程的模块

您将只看到以下模块(32位进程中仅有的64位模块):

  • 主模块(即可执行文件)
  • NtDll.dll
  • Wow64.dll
  • Wow64cpu.dll
  • Wow64win.dll
这很可能是因为
Process.Modules
在内部使用Win32 API,这在使用32/64位时有限制。MSDN建议(对于本机应用程序)使用,您也可以P/Invoke


它也发现了这个问题。

您应该检查您是否实际作为64位进程运行(检查
IntPtr.Size==8
或通过任务管理器、process Explorer等查看)。另外,我认为
wow64.dll
是64位windows上32位应用程序使用的层。因此,请确保您正在观看的iexplorer实例实际上是64位版本而不是32位版本。您找到适合您的解决方案了吗?看看你的相关问题,问题似乎还没有解决,不是吗?如果没有,您是否已成功构建代码示例以从64位环境访问正在运行的32位应用程序的所有模块?太糟糕了,我似乎找不到EnumProcessModulesEx的pinvoke示例。请参阅我的其他问题: