Как исправить BadImageFormatException при запуске приложения?

Я купил игру Stardew Valley на 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 или несовместимых версиях. Одна из странных вещей заключается в том, что исполняемый файл игры - x86, а все загруженные dll - x64. У моей жены тоже есть игра, и она работает на ее компьютере, однако Dependency Walker не сообщил о больших различиях. Она получила только несколько доступных длл (которые я потом скопировал, но не помогло).

Вот что я попробовал (с перезагрузками между ними):

  • Переустановите игру (3 раза)
  • перезагружать
  • Проверка целостности файла Steam
  • Начать вне пара
  • Начать с правами администратора
  • Все режимы совместимости
  • Переустановка XNA 4.0
  • Полностью удалил XNA 4.0 и переустановил
  • SFC / SCANNOW
  • dism /Online /Cleanup-Image /RestoreHealth
  • Установка на игру на диске C вместо диска F
  • Полное удаление всех System32/d2*.dll и d3*.dll и переустановка directx (что сломало несколько других игр)
  • Обновлены графические драйверы
  • dxdiag сообщает о проблемах
  • выключить и снова включить
  • размещение следующих (отсутствующих) dll в каталоге system32/syswow64/game
    • (X86)API-МС-WIN-ОСНОВНОЙ-APIQUERY-L1-1-0.DLL
    • (X86)API-МС-WIN-ОСНОВНОЙ-AppCompat-L1-1-1.DLL
    • (x86)API-MS-WIN-Core-ВОЛОКНА-L1-1-1.DLL
    • (x86)API-MS-WIN-Core-ВОЛОКНА-L2-1-1.DLL
    • (X86)API-МС-WIN-ОСНОВНОЙ-ПСМ-APPNOTIFY-L1-1-0.DLL
    • (X86)API-MS-WIN-УСТРОЙСТВА-CONFIG-L1-1-1.DLL
    • (X86)API-МС-WIN-ММ-MISC-L1-1-1.DLL
    • (X86)API-МС-WIN-RTCore-NTUSER-WinEvent-L1-1-0.DLL
    • (X86)API-МС-WIN-СЕКЬЮРИТИ-CryptoAPI-L1-1-0.DLL
    • (X 86)EXT-МС-WIN-RTCore-NTUSER-DPI-L1-1-0.DLL
    • (X86) ieshims.dll
    • (64)API-МС-WIN-BASE-UTIL-L1-1-0.DLL
    • (64)API-МС-WIN-ОСНОВНОЙ-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 были успешно решены.
Что еще я могу сделать, чтобы попытаться решить эту проблему? Я переустановлю свою систему через два месяца, что может помочь, но я думаю, что слишком радикально делать это сейчас ради одной программы, которая отказывается запускаться.

РЕДАКТИРОВАТЬ:
Вот аварийный дамп, срок действия которого истекает 27-04-2016.

Я также посмотрел на аварийный дамп и попытался отладить его с помощью 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 Files (x86) \ Microsoft Silverlight \ 5.1.41212.0
  • C: \ Program Files (x86) \ Microsoft SDK \ Windows Phone \ v8.1 \ Tools \ MDILXAPCompile \ Framework
  • C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework \ WindowsPhone \ v8.1
  • C: \ Program Files (x86) \ Microsoft SDK \ Windows Phone \ v8.1 \ Tools \ AppDeploy \ MdilXapCompilev8.0 \ Framework
  • C: \ Program Files (x86) \ Справочные сборки \ 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 \ сборка \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 (который существует).

3 ответа

Я наконец исправил это. Вот решение:

У меня был х64 X3dAudio_7.dll в папке sysWow64 и x86 X3dAudio_7.dll в папке system32. Я их переключил, переустановил XNA и все заработало!

Я узнал об этом, открыв Microsoft.Xna.Framework.dll в Dependency Walker. Я заметил, что все упомянутые DLL были x64, кроме этого.

Это может показаться нелогичным, но, если у вас установлена ​​x64 windows, все x64 dll попадают в папку system32, а x86 dll - в папку SysWow64.

Или вы можете поместить 32-битную версию X3dAudio_7.dll в ту же папку exe игры.

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

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

С закрытым Steam

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?

Также, кажется, здесь есть некоторые актуальные обсуждения.

Другие вопросы по тегам