.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示例。请参阅我的其他问题: