Ошибка BadImageFormatException x64

Я клянусь, что Microsoft "развивает" Visual Studio, тем более неосведомлен весь процесс.

У меня есть служба Windows с 3-мя библиотеками классов. Я вошел в свойства для каждой библиотеки классов и установил для платформы значение x64. Я сделал то же самое с Windows Service, а также с проектом Test Console, который я добавил, чтобы проверить все.

Я могу запустить консольное приложение на своем сервере x64 для Windows 2008 R2 без каких-либо проблем, но глупый установщик продолжает бомбить и говорит мне, что у меня плохое изображение. Я убедился, что установил целевую платформу установщика на x64.

Я понятия не имел, что эта глупая вещь будет бомбить, и будет очень признательна за любые идеи. Я ссылаюсь на другие DLL, и это может быть x86, но я думал, что если основные библиотеки были установлены правильно, что все будет работать...

Ответ 1

Я наконец понял это - это НИЧЕГО не имеет отношения к архитектуре, ссылкам или любой другой ерунде и всему, что связано с самим установщиком. Как объясняется в этой статье - установщик Visual Studio по умолчанию использует 32-разрядную библиотеку DLL, и именно это вызывает сбои.

Чтобы преодолеть эту проблему, просто выполните следующие действия:

  1. Убедитесь, что вы переходите на вкладку "Свойства" ⇒ "Сборка" для каждого проекта и устанавливаете целевую платформу на x64
  2. Нажмите на название вашего Установочного проекта, а затем Свойства и убедитесь, что Целевая Платформа имеет x64
  3. Создайте свое решение - если решение не компилируется, щелкните правой кнопкой мыши и выгрузите проект, а затем загрузите Porject для тех проектов, ссылки на которые не пройдены.
  4. Перейдите сюда и загрузите и установите 7.0 INstaller SDK
  5. Перейдите в папку C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin и установите Orca, дважды щелкнув файл Orca.Msi
  6. Запустите Orca и откройте папку MSI вашего проекта
  7. Выберите двоичный стол
  8. Дважды щелкните ячейку [Binary Data] для записи InstallUtil
  9. Убедитесь, что выбрано "Чтение двоичного файла из имени файла"
  10. Нажмите кнопку Обзор. Перейдите в C:\Windows\Microsoft.NET\Framework64\v4.0.30319
  11. .Выберите InstallUtilLib.dll
  12. Нажмите кнопку Открыть, а затем кнопку ОК

Вот и все - сохраните файл MSI в Orca, а затем разверните его - установка x64 должна работать без каких-либо проблем.

Ответ 2

Я сам столкнулся с этой проблемой в Visual Studio 2017, создавая установщик для x64-версии приложения, которое долгое время было x86.

Я не сомневаюсь, что ответ Кена является окончательным, но мне пришло в голову, что поскольку пользовательские действия вызываются установщиком, а не установленным приложением, в моем случае, по крайней мере, нет необходимости в проекте, содержащем пользовательский Действия должны иметь ту же разрядность, что и остальная часть приложения, поскольку его классы никогда не создаются самим приложением.

Поэтому я изменил платформу для этого проекта обратно на x86 и перестроил установщик.

Все это "просто сработало".

Конечно, это зависит от наличия пользовательских действий, которые полностью изолированы от остальной части решения. Впрочем, облегчение - не использовать Orca.