115

InstallUtil.exe を使用して Windows サービスをインストールしようとしていますが、エラー メッセージが表示されます

{xxx.exe}System.BadImageFormatException: ファイルまたはアセンブリ ' ' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました。

何を与える?


編集:(OPによるものではありません)dupから抽出された完全なメッセージは、より多くのヒットを取得しています[Googleability用]:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe C:\xxx.exe Microsoft (R) .NET Framework インストール ユーティリティ バージョン 4.0.30319.1 Copyright (c) Microsoft Corporation. 全著作権所有。

インストールの初期化中に例外が発生しました: System.BadImageFormatException: ファイルまたはアセンブリ 'file:///C:\xxx.exe' またはその依存関係の 1 つを読み込めませんでした。不正な形式のプログラムをロードしようとしました..

4

16 に答える 16

163

それが誰かを助ける場合の完全性のためのもう少しの詳細...

最近のこの例外の最も一般的な理由は、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 \ Framework 64 \ v2.0.50727 \ installutil.exe

動作しません(他のフレームワークバージョンに置き換えてください:( v1.1.432232ビットのみなので、この問題は発生しません)v4.0.30319、上記のように)。

明らかに、他の回答で説明されているように、実行している.NETバージョン番号はinstallutil、インストーラーを実行しているEXE / DLLファイルの.NETバージョン番号>=(できれば=)である必要があります。

最後に、 Visual Studio 2010では、ツールはデフォルトでx86バイナリを生成することに注意してください(以前のような任意のCPUではありません)。

System.BadImageFormatExceptionの完全な詳細(唯一の原因が不一致のビットネスであると言うことは、実際には非常に単純化されすぎています!)。

x64インストーラーを使用BadImageFormatExceptionしないもう1つの理由は、Visual Studio 2010では、デフォルトのインストールプロジェクトタイプがx64システムでも32ビットシムを生成することです(「64ビットマネージドカスタムアクションはSystem.BadImageFormatException例外をスローします」を検索します。ページ)。.vdprojInstallUtilLib

于 2010-01-29T09:18:32.567 に答える
16

最新のフレームワーク (アプリをコンパイルしたもの) が PATH の最初にあることを確認してください。それは私にとって問題を解決しました。(フォーラムで見つけた)

于 2008-11-27T07:39:28.113 に答える
15

重要なのは、2 つの場所にあるプロジェクトの一致プロセッサ設定を設定することです。

ここに画像の説明を入力

また、以下に示すように、[テスト] メニュー >> [テスト設定] >> [デフォルト プロセッサ アーキテクチャ] >> でアーキテクチャ設定が同じであることを確認します。

ここに画像の説明を入力

これはVS2013用ですが、他のバージョンでも同じかもしれません。

更新 - VS2019 の場合:

ここに画像の説明を入力

于 2019-05-15T19:51:10.883 に答える
9

64 ビット バージョンのツールを使用して 32 ビット アプリケーションをインストールしていると思います。今日もこの問題に直面し、このフレームワーク パスを使用して対応しました。

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

32 ビット アプリケーションを正常にインストールする必要があります。

于 2013-07-05T07:35:55.120 に答える
7

OK、これは私が抱えていた問題であり、それを修正したものは、上記に非常に関連しているようです。

Visual Studio2010Expressを使用しています。私は実際には何もしなかったテストサービスを書きました。それは後で本物のための練習でした。

サービスを作成し、を使用してインストールしようとするとinstallutil.exe、次のエラーが発生しました。

System.BadImageFormatException:ファイルまたはアセンブリ'{filename.exe}'またはその依存関係の1つを読み込めませんでした。間違った形式のプログラムを読み込もうとしました。

これまでのところ、元の作者と同じです。

Visual Studio 2010の32ビット出力に関する上記のRubenの観察は、ここでの救世主でした。

私は64ビットバージョンを使用しましたがinstallutil.exe、確かに、VisualStudio2010ビルドの出力は32ビットでした。ここに少し付加価値を加えるために、最新の.NET Frameworkの32ビットバージョンとそれに関連installutil.exeするものがC:\ Windows \ Microsoft.NET\frameworkフォルダーにあります。このバージョンを使用するとinstallutil.exe、問題が修正されました。サービスは問題なくインストールされました!

これが他の誰かに役立つことを願っています。

于 2013-01-23T08:43:57.510 に答える
0

同じ問題がありました。実行には標準コマンドを使用します。X86 テストに対して X64 ro run を呼び出していました。nunit-runner の X64 バージョンではなく、X86 を指定する必要がありました。

于 2016-01-27T11:57:08.663 に答える
0

要約すると、64 ビット システムに 64 ビット サービスを正常にインストールするには、Build と Project\Build\Platform の両方を x64 に設定する必要があります。

于 2016-10-06T00:27:20.307 に答える
0

同じ症状の問題に対する別の解決策を見つけました。

プロジェクトを .net 4.7.1 から 4.7.2 に更新したときに、このエラーが発生しました。

問題は、プロジェクトで System.Net.Http を参照しなくなったにもかかわらず、web.config のdependentAssembily セクションにリストされていたことです。これと他の未使用のアセンブリ参照をweb.configから削除すると、問題が解決しました。

于 2019-05-10T16:13:29.520 に答える