Почему утилита corflags не предупреждает при маркировке сборок x64 как x86?
Вопрос
Если я установлю флаги платформы MyApp.exe на x64
Я все еще могу запустить утилиту Corflags, как это:
corflags / 32bit + MyApp.exe
corflags с радостью установит 32-битный флаг в 1.
Конечно, когда я попытаюсь запустить приложение, я получу ошибку:
0xC000007B = STATUS_INVALID_IMAGE_FORMAT
Мой вопрос: есть ли способ, чтобы сборка, созданная для x64, могла работать как x86 или просто утилита corflags не заботится? Р>
Решение
Компиляция вашего двоичного файла с помощью параметра " Тип платформы " в x64 также изменяет заголовок PE изображения, чтобы сделать его только 64-битным. Вы можете убедиться в этом, воспользовавшись, например, устройством для проверки зависимости .
Наличие 64-битного PE-заголовка, кажется, имеет приоритет над 32-битными корфлагами Загрузчик win32 для .NET, похоже, видит, что PE-заголовок несовместим с текущей системой (64 бита в 32-битной системе). Это препятствует загрузке собственного изображения, а также, кроме того, части сборки .NET изображения.
Я не знаю ни одного инструмента, способного обновить PE-заголовок таким образом. Похоже, это не просто вопрос изменения флага для установки изображения на 32 бита. (См. этот пост в блоге )
Другие советы
Потому что, если вы не загружаете собственную DLL, нет причины, по которой вы не можете отметить ее как 32-разрядную. Если это чистый MSIL, решение не так много значит.