为什么在将x64程序集标记为x86时,corflags实用程序不会警告?

问题描述:

如果我设置MyApp.exe将平台的标志是64 我仍然可以运行corflags utilty这样的:
corflags位/ 32位+ MyApp.exe的
corflags将32位的标志高高兴兴地设置为1 当然当我会尝试运行应用程序,我会得到一个错误: 0xC000007B = STATUS_INVALID_IMAGE_FORMAT为什么在将x64程序集标记为x86时,corflags实用程序不会警告?

我的问题是:有没有一种方式,它是建立在x64上的组件可为86 运行,或者它只是corflags实用程序不'关心'?

+1

我注意到用户mdb编辑了这个帖子并删除了x64标签。谁能告诉我为什么? (我期望用x64标签找到这样的问题) – 2008-11-22 12:10:55

+0

这绝对是一个x64的问题。这应该被标记为x64。 – 2008-11-22 19:48:16

通过将“平台类型”设置为x64来编译您的二进制文件也会将映像PE标头更改为仅64位。例如,您可以使用Dependency Walker来查看。

拥有一个64位的PE头似乎优先于32位唯一的corflags。 .NET的win32引导程序似乎发现PE头与当前系统不兼容(32位系统上的64位)。这可以防止加载本地图像,并且还可以避免图像的.NET程序集部分。

虽然我不知道任何能够以这种方式更新PE标头的工具。这似乎不仅仅是将标志设置为32位的问题。 (见this blog post

因为如果你不加载本地DLL,没有理由你不能注释为32位。如果它是纯粹的MSIL,这个决定并不意味着太多。