如何修复应用程序启动时出现的 BadImageFormatException?

如何修复应用程序启动时出现的 BadImageFormatException?

我在 Steam 上购买了《星露谷》游戏,安装了它,启动了它。什么都没发生 :(...
当我查看事件查看器时,我看到了以下信息:

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 或不兼容的版本。奇怪的是游戏 exe 是 x86 的,而所有加载的 dll 都是 x64 的。我的妻子也有这个游戏,它在她的机器上运行,但 Dependency Walker 报告没有太大差异。她只得到了几个可用的 dll(我后来复制了它们,但没有帮助)。

这是我尝试过的(中间重新启动过):

  • 重新安装游戏(3次)
  • 重启
  • Steam 文件完整性检查
  • 启动外部 steam
  • 以管理员身份启动
  • 所有兼容模式
  • 重新安装 XNA 4.0
  • 彻底删除 XNA 4.0 并重新安装
  • 证监会/扫描
  • dism /在线/清理图像/RestoreHealth
  • 在 C 盘而不是 F 盘上安装游戏
  • 彻底删除所有 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-设备-配置-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 来查看它的引用,它们是:

  • 利德格伦网络
  • 微软Xna框架
  • 微软.Xna.Framework.游戏
  • 微软.Xna.框架.图形
  • 微软Xna框架
  • mscorlib
  • 演示核心
  • Steamworks网络
  • 系统
  • 系统核心
  • 系统服务模型
  • 系统.Windows.窗体
  • 系统 XML
  • 平铺

所有这些 dll 均已成功解析。
我还能做些什么来尝试解决这个问题?我将在两个月后重新安装我的系统,这可能会有所帮助,但我认为现在为了 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.

我不明白这个错误。我已经重新安装了两次了!
但是,当我搜索 dll 时,我发现位于以下位置的多个版本:

  • C:\Program 文件(x86)\Microsoft Silverlight\5.1.41212.0
  • C:\Program 文件 (x86)\Microsoft SDKs\Windows Phone\v8.1\Tools\MDILXAPCompile\Framework
  • C:\Program 文件(x86)\Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.1
  • C:\Program 文件(x86)\Microsoft SDKs\Windows Phone\v8.1\Tools\AppDeploy\MdilXapCompilev8.0\Framework
  • C:\Program 文件(x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0
  • C:\Program 文件(x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Windows\x86
  • C:\Program 文件(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

我终于解决了这个问题。解决方案如下:

我在 sysWow64 文件夹中有 x64 ,在 system32 文件夹中有X3dAudio_7.dllx86 。我切换了它们,重新安装了 XNA,一切正常!X3dAudio_7.dll

我在 Dependency Walker 中打开 Microsoft.Xna.Framework.dll 时发现了这一点。我注意到,除此以外,所有引用的 DLL 都是 x64。

这似乎不合逻辑,但如果您安装了 x64 版 Windows,则所有 x64 dll 都会进入 system32 文件夹,而 x86 dll 则会进入 SysWow64 文件夹。

答案2

我本来想添加一条评论,但现在还不能,而且这不太可能起作用,但由于您可能还没有尝试过,所以值得一试。

可能想要在执行此操作之前卸载游戏,但这实际上取决于你,因为无论如何你似乎对这些东西有相当不错的掌握。

Steam 关​​闭后

1)开始>运行>%temp%(清除所有垃圾)

2)清除临时文件C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET FilesC:\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 版本?

似乎还有一些相关的讨论这里

答案3

或者您可以将32位版本的X3dAudio_7.dll放入游戏exe的同一文件夹中。

相关内容