
Microsoft Sysinternals Process Monitor: официальный пример основного окна. Изображение показывает инструмент наблюдения; оно не является трассой ошибки 0xc000007b.
© Microsoft. Used with permission from Microsoft. · источник и условия использования · CC BY 4.0
Окно «Приложению не удалось правильно запуститься» с 0xc000007b сообщает STATUS_INVALID_IMAGE_FORMAT: загрузчик отклонил исполняемый образ. Несовпадение разрядности — важная гипотеза, но не единственная: сам файл может быть неподходящим или повреждённым. Значение кода дано в спецификации NTSTATUS Microsoft. [1]
Запишите полный текст, имя EXE, версию программы, откуда она установлена и что изменилось перед сбоем. Если в сообщении назван DLL-файл, сохраните его полный путь. Не подменяйте этот код похожими 0xc0000135, «модуль не найден» или ошибкой .NET: их причины и дальнейшие проверки отличаются.
Схема редакции «Мы из 90х».
На 64-битной Windows могут работать и 32-битные программы. Нативный x86-процесс не загружает x64-DLL внутрь своего адресного пространства, как и наоборот. Поэтому установка только x64-комплекта среды не обязательно обеспечивает зависимости x86-приложения. [2], [3]
| Процесс | DLL в этом процессе |
|---|---|
| x86 | Нужен совместимый x86-компонент |
| x64 | Нужен совместимый x64-компонент |
| ARM64 или смешанные технологии | Нужны правила платформы и поставщика приложения |
Таблица не описывает все варианты .NET AnyCPU, ARM64EC и межпроцессного взаимодействия.
Учебная таблица редакции.
Разные процессы могут обмениваться данными и при разной архитектуре; это не делает их DLL взаимозаменяемыми. Для плагина проверяйте архитектуру хост-программы. Наличие папки Program Files (x86) полезно как подсказка, но не является окончательным исследованием каждого лежащего там файла.
Скачайте Sigcheck только со страницы Microsoft Sysinternals, распакуйте и прочитайте лицензию. Для конкретных EXE и подозрительной DLL можно получить расширенные сведения и хеш:
Командная строка · учебные пути
sigcheck.exe -a -h "C:\Apps\Example\Example.exe"
sigcheck.exe -a -h "C:\Apps\Example\plugin.dll"Смотрите тип образа, версию и сведения о подписи. Поля и возможности зависят от версии инструмента. Подпись не доказывает, что файл подходит этому приложению; отсутствие подписи тоже не доказывает повреждение. Параметры VirusTotal для этой проверки не нужны. [4]
Если установлен инструментарий Visual Studio C++, в Developer Command Prompt есть DUMPBIN:
Developer Command Prompt · учебные пути
dumpbin /headers "C:\Apps\Example\Example.exe"
dumpbin /headers "C:\Apps\Example\plugin.dll"Сравните поле Machine в заголовках. DUMPBIN не входит в обычную установку Windows; сообщение «не является командой» означает отсутствие инструмента или нужного окружения. Для управляемых сборок .NET и специальных архитектур нужен анализ конфигурации проекта, а не один вывод о Machine. [5]
Соседняя с EXE библиотека может иметь такое же имя, как системная. В Windows существуют правила поиска DLL, известные системные DLL, манифесты и другие механизмы загрузки. Порядок зависит от типа приложения и применённых режимов; нельзя считать, что любой процесс всегда берёт первый файл из PATH. [6]
В Process Monitor остановите захват, очистите текущие события, задайте фильтр по нужному имени процесса, начните запись и воспроизведите один запуск. Затем остановите захват. Учитывайте, что запускающий EXE может создавать другой процесс: проверьте дерево процессов и время. Отберите обращения к файлам DLL и события загрузки образов, сохраняя исходную трассу. [7]
Неудачно отклонённая DLL может проявиться как обращение к файлу до успешного события Load Image. Поэтому отсутствие её в списке загруженных модулей не доказывает, что загрузчик к ней не обращался. Отдельная строка NAME NOT FOUND может быть нормальной пробой очередного пути.

Полезные вопросы: ошибка началась после обновления, установки плагина, ручного копирования DLL или переноса папки с другого компьютера? Совпадает ли отказ у чистой официальной установки той же версии? Есть ли в каталоге приложения лишняя библиотека, которую добавляли отдельно?
Скопируйте журнал и сведения о подозрительном файле до изменений. Для программы с функцией проверки файлов используйте штатную проверку поставщика; для обычного установщика — Repair или восстановление той же поддерживаемой версии. Если приложение распространяется комплектом локальных библиотек, обновляют согласованный комплект, а не один файл по совпадению имени.
У .NET-приложения нативный плагин способен создать архитектурный конфликт даже при правильной установленной .NET-среде. Ошибка не всегда решается переустановкой самой Windows.
| Наблюдение | Предел вывода |
|---|---|
| DLL не подходит архитектуре процесса | Подтверждён конфликт для этой пары |
| DLL подписана | Проверено происхождение подписи, не совместимость |
| Одна проба пути дала NAME NOT FOUND | Поиск мог продолжиться в другом месте |
| Repair изменил локальную DLL и запуск восстановился | Есть связь с комплектом приложения |
| Сбой остался после установки среды | Нужно проверить реально выбранный путь |
Учебная таблица редакции.
Если приложение требует Visual C++, сверяйте поколение и архитектуру среды с документацией поставщика. Пакеты x86 и x64 устанавливаются раздельно и могут требоваться одновременно. Современный поддерживаемый пакет семейства v14 не заменяет автоматически Visual C++ 2013 и более старые семейства. Microsoft публикует отдельные ссылки и условия совместимости. [3]
Используйте официальный установщик Microsoft и его Repair, если он доступен. После восстановления перезапустите программу и повторите тот же сценарий. Если несовместимая DLL лежит рядом с EXE, установка системной среды не обязана изменить выбранный локальный файл.
Не скачивайте DLL с сайтов «все библиотеки»: имя не гарантирует архитектуру, версию и происхождение. Regsvr32 предназначен для регистрации поддерживающих это COM-компонентов; он не является универсальной командой исправления любой DLL.
На x64-Windows имена System32 и SysWOW64 исторически не означают соответственно «32-битные» и «64-битные» библиотеки. В первом находятся нативные системные компоненты, во втором — компоненты среды 32-битных приложений; для 32-битного процесса также действует перенаправление файловой системы. [8]
Не копируйте вручную одну DLL между этими папками и не удаляйте системную библиотеку ради эксперимента. Если подтверждено повреждение системных компонентов, используйте штатную проверку Windows и её журналы. Но набор DISM/SFC не должен подменять исследование приложения, у которого испорчен собственный каталог.
Программа запускает тот же EXE, использует согласованные зависимости и повторяет исходную операцию без ошибки. Сохраните, что именно было восстановлено: версия приложения, конкретный плагин или пакет среды. Если после изменения исчезла только первая ошибка и появилась другая, исследование ещё не закончено.
Для поддержки подготовьте код, полный путь запуска, архитектуру Windows и приложения, сведения о найденной DLL, её хеш и небольшой фрагмент трассы вокруг отказа. PML и дампы могут содержать пути и рабочие данные; передавайте их только адресно.