如果我将 MyApp.exe 的平台标志设置为 x64,我仍然可以像这样运行 corflags 实用程序:
corflags /32bit+ MyApp.exe
corflags 很乐意将 32bit 标志设置为 1。当然,当我尝试运行应用程序时我会收到一个错误:0xC000007B =STATUS_INVALID_IMAGE_FORMAT
我的问题是:有没有一种方法可以使构建到 x64 的程序集可以作为 x86 运行,或者只是 corflags 实用程序不“关心”?
通过将“平台类型”设置为 x64 来编译二进制文件也会更改图像 PE 标头,使其仅为 64 位。例如,您可以使用Dependency Walker看到这一点。
具有 64 位 PE 标头似乎优先于仅 32 位的标志。.NET 的 win32 引导程序似乎看到 PE 标头与当前系统不兼容(32 位系统上的 64 位)。这会阻止加载本机图像,顺便也阻止加载图像的 .NET 程序集部分。
不过,我不知道有任何工具能够以这种方式更新 PE 标头。这似乎不仅仅是更改标志以将图像设置为 32 位的问题。(见这篇博文)
因为如果您不加载本机 DLL,则没有理由不能将其标记为 32 位。如果它是纯粹的 MSIL,那么这个决定就没有那么重要了。