我正在为我们的产品编写一个安装验证工具,我需要从几个已安装的程序集中检索一些 PE 信息。无论我们的产品安装在什么平台上,我们都会将 AMD64、x86 和 MSIL 组件运送到特定位置,让用户为这些平台创建部署项目。
问题是,使用以下代码:
Module manifestModule = Assembly.LoadFile(fileName).ManifestModule;
ImageFileMachine m;
PortableExecutableKinds pe;
manifestModule.GetPEKind(out pe, out m);
如果应用程序以 x86 运行并尝试加载 AMD64 程序集,Assembly.LoadFile(...) 将中断,反之亦然。
我发现这些相关但不完全:
- 如何确定 .NET 程序集是为 x86 还是 x64 构建的? 它没有说明您如何从 x86 进程中挖掘 AMD64 程序集。
- 如何确定可执行文件是为哪个平台编译的? 我真的真的需要同时获得 ImageFileMachine 和 PEKinds,因为我们拥有大量的程序集以及我们需要确定的属性。