2008-11-27 9 views
82

Я пытаюсь установить службу Windows, используя Installutil.exe и я получаю сообщение об ошибкеSystem.BadImageFormatException: Не удалось загрузить файл или сборку (из Installutil.exe)

System.BadImageFormatException: Could not load file or assembly ' {xxx.exe} ' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Что это дает?


EDIT: (Не по OP) Полный сообщение извлекается из DUP получать намного больше хитов [для googleability]:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe C:\xxx.exe Microsoft (R) .NET Framework Installation utility Version 4.0.30319.1 Copyright (c) Microsoft Corporation. All rights reserved.

Exception occurred while initializing the installation: System.BadImageFormatException: Could not load file or assembly 'file:///C:\xxx.exe' or one of its dependencies. An attempt was made to load a program with an incorrect format..

ответ

14

Убедитесь, что новейшие Framework (тот, который вы скомпилированный ваше приложение с) является сначала в PATH. Это решило проблему для меня. Найдено здесь: http://www.issociate.de/board/post/280574/Installutil_System.BadImageFormatException.html

+0

Эта ссылка, похоже, ушла. Не удивительно. 6 лет назад. – 2014-10-30 19:41:44

+2

Здесь он находится на Archive.org https://web.archive.org/web/20100527204545/http://www.issociate.de/board/post/280574/Installutil_System.BadImageFormatException.html – Epaga 2014-11-14 08:24:00

125

Некоторые более подробно для полноты в случае кто-то помогает ...

Обратите внимание, что наиболее частой причиной этого исключения в эти дни пытается загрузить 32-битовую конкретные (/platform:x86) DLL в процесс с 64-разрядным или наоборот (загрузка 64-разрядной (/platform:x64) DLL в процесс, который составляет 32 бит). Если ваш platform не является специфичным (/platform:AnyCpu), это не будет возникать (при условии, что никакие ссылки не имеют неправильной битности).

Другими словами, бег:

%windir%\Microsoft.NET\Framework\v2.0.50727\installutil.exe

или:

%windir%\Microsoft.NET\Framework64\v2.0.50727\installutil.exe

не будет работать (суррогат в других каркасных версиях: v1.1.4322 (32-разрядная, так что этот вопрос не возникает) и v4.0.30319, как указано выше).

Очевидно, что, как описано в другом ответе, вам также понадобится номер версии .NET для installutil, который вы используете для> = (предпочтительно =) файла EXE/DLL, на котором выполняется программа установки.

Наконец, обратите внимание, что in Visual Studio 2010, the tooling will default to generating x86 binaries (rather than Any CPU as previously).

Complete details of System.BadImageFormatException (заявив, что единственная причина несовместимости - это действительно грубое упрощение!).

Другая причина BadImageFormatException под x64 установщиком что in Visual Studio 2010, the default .vdproj Install Project type generates a 32-bit InstallUtilLib shim, even on an x64 system (Поиск «64-разрядные управляемые пользовательские действия бросить System.BadImageFormatException исключение» на странице).

5

OK, это проблема, которая у меня была, и, что исправлено, кажется очень актуальным для вышеупомянутого.

Я использую Visual Studio 2010 Express. Я написал тестовую службу, которая на самом деле ничего не сделала. Это было просто практикой для настоящей вещи позже.

Я написал службу и попытался установить его с помощью installutil.exe и получил следующее сообщение об ошибке:

System.BadImageFormatException: Could not load file or assembly '{filename.exe}' or one of its dependencies. An attempt was made to load a program with an incorrect format.

До сих пор же, как и оригинальный автор.

Ruben's observation выше о 32-разрядном выходе Visual Studio 2010 был спасителем здесь.

Я использовал 64-разрядную версию installutil.exe и, конечно же, результат сборки Visual Studio 2010 был 32-разрядным. Чтобы добавить здесь немного дополнительную ценность, вы можете найти 32-битную версию последней платформы .NET и связанного с ней installutil.exe в папке C: \ Windows \ Microsoft.NET \ framework. Использование этой версии installutil.exe исправило мою проблему; сервис установлен без заминки!

Я надеюсь, что это поможет кому-то еще.

8

Я думаю, что вы используете 64-битную версию инструмента для установки 32-разрядного приложения. Я также столкнулся с этой проблемой сегодня и использовал этот путь Framework для обслуживания.

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

и он должен установить ваш 32-битное приложение, просто отлично.

Благодаря

Сэчин Калий

1

В случае помогает любому, я был в состоянии исправить это же исключение с помощью this answer на подобный вопрос, но я не получаю исключение от использования Installutil.exe.

0

У меня была та же проблема. Я использую стандартную команду для выполнения. Это вызов X64 ro для тестирования X86. Мне нужно было указать X86, а не X64 версию nunit-runner.

0

Подводя итог, для сборки 64-битной версии 64-битной системы необходимо установить значение как для сборки, так и для проекта \ Build \ Platform.

 Смежные вопросы

  • Нет связанных вопросов^_^