Неправильный формат изображения между 32-битными и 64-битными машинами - PullRequest
2 голосов
/ 16 марта 2012

У нас есть приложение winforms, которое должно общаться с AS400. Для этого мы импортировали классы IBM.Data.DB2.iSeries в приложение Winforms и установили IBM System I Access для Windows на наших компьютерах. Он должен иметь доступ к системе I или он не будет взаимодействовать с AS / 400. Все отлично работает на моей 64-битной машине разработки. Он также отлично работает на 64-битной машине клиента. Однако, когда мы пытаемся установить его на 32-битную машину, мы получаем исключение формата Bad Image. Мы попытались сделать только установщик x86 вместо любого процессора, но это не сработало (то же самое, за исключением плохого образа). Есть идеи?

Ответы [ 2 ]

5 голосов
/ 25 марта 2012

Даже если вы скомпилировали свою программу в 32-разрядную версию, где-то она все еще пытается загрузить 64-разрядную библиотеку DLL. Поскольку вы говорите, что сторонние dll являются 32-битными, то остаются ваши собственные dll.

Вы можете убедиться в этом, установив платформу решения на x86. Затем проверьте все ваши проекты (exe и dll), если они установлены на x86. Я подозреваю, что у одного из них целевая платформа установлена ​​на x64. Вы проверяете их, щелкая правой кнопкой мыши Project, выбирая Properties, Build-tab -> Platform Target.

Также убедитесь, что на самом деле все dll установлены в Build в Configuration Manager (выберите «Configuration Manager ...» в раскрывающемся меню «Платформы решений» в меню.

2 голосов
/ 23 марта 2012

Я не уверен, что не так с вашей сборкой, но я бы посоветовал попробовать валидатор PE-файлов и проверить магическое число исполняемых и динамических библиотечных файлов из вашегостроить.

В частности, посмотрите, начинается ли каждый файл с 0x10b или 0x20b в качестве первой проверки перед выполнением более глубокой проверки.Это можно легко сделать с помощью такого инструмента, как (в настоящее время снятый с производства) PEiD .

. Как уже упоминалось, очень вероятно, что один из ваших двоичных файлов будет 64-разрядным,ожидая 32. Это было бы легче найти с помощью отладчика, который может разрешать зависимости , хотя это не может быть юридически исправимо.

...