web-dev-qa-db-ja.com

アプリケーションの起動時にBadImageFormatExceptionを修正するにはどうすればよいですか?

SteamでStardewValleyというゲームを購入し、インストールして起動しました。何も起こらなかった :(...
イベントビューアを調べたところ、次の情報が表示されました。

Application: Stardew Valley.exe Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.BadImageFormatException    at
StardewValley.Program.Main(System.String[])

私にはこれは悪いdllまたはdllの間違ったアーキテクチャのように聞こえますが、私は問題が何であるかを整理することができませんでした。その直後:

Faulting application name: Stardew Valley.exe, version: 1.0.5940.30711, time stamp: 0x5705b1ef
Faulting module name: KERNELBASE.dll, version: 10.0.10586.162, time stamp: 0x56cd55ab
Exception code: 0xe0434352
Fault offset: 0x000bdad8
Faulting process id: 0x23d8
Faulting application start time: 0x01d19eee1ec0b80d
Faulting application path: F:\Steam\steamapps\common\Stardew Valley\Stardew Valley.exe
Faulting module path: C:\WINDOWS\SYSTEM32\KERNELBASE.dll
Report Id: b8cdbcca-597d-4eb4-a44c-47f2b8c510a5
Faulting package full name: 
Faulting package-relative application ID: 

に続く:

Fault bucket 108078241334, type 1
Event Name: APPCRASH
Response: Not available
Cab Id: 0

Problem signature:
P1: Stardew Valley.exe
P2: 1.0.5940.30711
P3: 5705b1ef
P4: KERNELBASE.dll
P5: 10.0.10586.162
P6: 56cd55ab
P7: e0434352
P8: 000bdad8
P9: 
P10: 

私は自分の問題を解決するのが好きですが、6時間後にあきらめます。 Dependency Walkerを使用して、不足しているdllまたは互換性のないバージョンについて通知しました。奇妙なことの1つは、ゲームのexeファイルがx86であり、ロードされたdllがすべてx64であることです。私の妻もゲームを持っていて、それは彼女のマシンで動作しますが、DependencyWalkerは大きな違いはないと報告しました。彼女はさらにいくつかのdllを利用できるようになりました(後でコピーしましたが、役に立ちませんでした)。

これが私が試したものです(間に再起動します):

  • ゲームの再インストール(3回)
  • リブート
  • Steamファイルの整合性チェック
  • Steamの外から始めましょう
  • 管理者として開始
  • すべての互換モード
  • XNA4.0の再インストール
  • XNA 4.0を完全に削除し、再インストールします
  • sfc/scannow
  • dism/Online/Cleanup-Image/RestoreHealth
  • FドライブではなくCドライブのゲームにインストールする
  • すべてのSystem32/d2 * .dllとd3 * .dllを完全に削除し、directxを再インストールします(これは他のいくつかのゲームを壊しました)
  • 更新されたグラフィックドライバー
  • dxdiagは問題を報告しません
  • シャットダウンして再びオンにします
  • 次の(欠落している)dllをsystem32/syswow64/gameディレクトリに配置します
    • (x86)API-MS-WIN-CORE-APIQUERY-L1-1-0.DLL
    • (x86)API-MS-WIN-CORE-APPCOMPAT-L1-1-1.DLL
    • (x86)API-MS-WIN-CORE-FIBERS-L1-1-1.DLL
    • (x86)API-MS-WIN-CORE-FIBERS-L2-1-1.DLL
    • (x86)API-MS-WIN-CORE-PSM-APPNOTIFY-L1-1-0.DLL
    • (x86)API-MS-WIN-DEVICES-CONFIG-L1-1-1.DLL
    • (x86)API-MS-WIN-MM-MISC-L1-1-1.DLL
    • (x86)API-MS-WIN-RTCORE-NTUSER-WINEVENT-L1-1-0.DLL
    • (x86)API-MS-WIN-SECURITY-CRYPTOAPI-L1-1-0.DLL
    • (x86)EXT-MS-WIN-RTCORE-NTUSER-DPI-L1-1-0.DLL
    • (x86)IESHIMS.DLL
    • (x64)API-MS-WIN-BASE-UTIL-L1-1-0.DLL
    • (x64)API-MS-WIN-CORE-COMM-L1-1-0.DLL

私はexeを逆コンパイルして、その参照を調べました。

  • Lidgren.Network
  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Game
  • Microsoft.Xna.Framework.Graphics
  • Microsoft.Xna.Framework.Xact
  • mscorlib
  • PresentationCore
  • Steamworks.NET
  • システム
  • System.Core
  • System.ServiceModel
  • System.Windows.Forms
  • System.Xml
  • xTile

これらのdllはすべて正常に解決されました。
この問題を解決するためにこれ以上何ができますか?2か月後にシステムを再インストールします。しかし、立ち上げを拒否する1つのプログラムのために、今それを行うのは過激すぎると思います。

編集:
これがクラッシュダンプです これは2016年4月27日に期限切れになります。

また、クラッシュダンプを調べて、Visual Studio 2015でデバッグしようとしました。次のエラーが発生します:不明なモジュールでタイプ「System.BadImageFormatException」の未処理の例外が発生しました。

Additional information: Could not load file or Assembly 'Microsoft.Xna.Framework.dll' or one of its dependencies.  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)

If there is a handler for this exception, the program may be safely continued.

私はこのエラーを理解していません。すでに2回再インストールしました!
しかし、dllを検索すると、次の場所に複数のバージョンがあります。

  • C:\ Program Files(x86)\ Microsoft Silverlight\5.1.41212.0
  • C:\ Program Files(x86)\ Microsoft SDKs\Windows Phone\v8.1\Tools\MDILXAPCompile\Framework
  • C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.1
  • C:\ Program Files(x86)\ Microsoft SDKs\Windows Phone\v8.1\Tools\AppDeploy\MdilXapCompilev8.0\Framework
  • C:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\Silverlight\v5.0
  • C:\ Program Files(x86)\ Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86
  • C:\ Program Files(x86)\ Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360
  • C:\ Windows\Microsoft.NET\Assembly\GAC_32\Microsoft.Xna.Framework\v4.0_4.0.0.0__842cf8be1de50553

DotPeekで参照を見ると、C:\ Program Files(x86)\ Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86\Microsoft.Xna.Framework.dll(これ存在します)。

1
Mixxiphoid

やっと直しました。解決策は次のとおりです。

私はx64を持っていましたX3dAudio_7.dllsysWow64フォルダーとx86X3dAudio_7.dllsystem32フォルダー内。それらを切り替え、XNAを再インストールすると、すべてが機能しました。

Dependency WalkerでMicrosoft.Xna.Framework.dllを開くと、これがわかりました。これを除いて、参照されているすべてのDLLがx64であることに気付きました。

論理的には思えないかもしれませんが、Windowsをx64でインストールしている場合は、すべてのx64 dllがsystem32フォルダーに、x86dllがSysWow64フォルダーに配置されます。

4
Mixxiphoid

コメントを追加するつもりでしたが、まだできません。とにかくこれが機能する可能性は低いですが、おそらく試したことがないので、一見の価値があります。

あなたかもしれませんこれを行う前にゲームをアンインストールしたいと思うかもしれませんが、とにかくこのことをかなりよく理解しているように見えるので、それは本当にあなた次第です。

スチームを閉じた状態

1)開始>実行>%temp%(すべてのジャンクをクリアします)

2)C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET FilesおよびC:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Filesの一時ファイルをクリアします

3).NET修復ユーティリティを実行します(場合によっては、.NETを4.6.2の最新の安定バージョンに更新します): https://www.Microsoft.com/en-us/download/details.aspx ?id = 30135

次に、再起動して再試行するか、ゲームを削除した場合は再インストールしてからやり直してください。

編集:そしてあなたがアンインストール/再インストールしたすべてのもの、あなたはx64とx86の両方のバージョンをインストールしましたか?

また、いくつかの関連する議論があるようです ここ

1
pay

または、32ビットバージョンのX3dAudio_7.dllをゲームexeの同じフォルダーに配置することもできます。

1
pitsch