如果我将MyApp.exe的平台标志设置为x64
我仍然可以像这样运行corflags utilty:
corflags / 32bit + MyApp.exe
corflags将愉快地将32位标志设置为1。
当然,当我尝试运行应用程序时,我会收到一个错误:
0xC000007B = STATUS_INVALID_IMAGE_FORMAT
我的问题是:是否有一种方法可以将x64构建的程序集作为x86运行 或者只是corflags实用程序不“关心”?
答案 0 :(得分:2)
通过将“平台类型”设置为x64来编译二进制文件也会更改映像PE标头,使其仅为64位。例如,您可以使用Dependency Walker来查看此内容。
具有64位PE标头似乎优先于仅32位的corflags。 .NET的win32 bootstrapper似乎看到PE头与当前系统不兼容(32位系统上的64位)。这样可以防止加载本机映像,也可以防止图像的.NET程序集部分。
我不知道任何能够以这种方式更新PE头的工具。这似乎不仅仅是更改标志以将图像设置为32位。 (见this blog post)
答案 1 :(得分:0)
因为如果您没有加载本机DLL,那么无法将其标记为32位。如果它是纯粹的MSIL,那么决定并不意味着那么多。