我有代码:
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位应用程序的模块?它只返回魔兽世界。
答案 0 :(得分:1)
我的申请中遇到同样的问题,虽然我觉得你倒退了(见可以评论你的问题)。
实际上,如果您自己的进程是64位进程,则无法在64位Windows上枚举32位进程的模块。
您只会看到以下模块(32位进程中唯一的64位模块):
最有可能的原因是Process.Modules
内部使用EnumProcessModules
Win32 API,这在使用32/64位时有局限性。 MSDN建议(对于本机应用程序)使用EnumProcessModulesEx
,您也可以使用P / Invoke。
它looks like others也发现了这个问题。