0xc000007b Ошибка «Приложение не удалось запустить правильно»? - PullRequest
1 голос
/ 28 января 2020

Я написал консольное приложение C ++ в Visual Studio 2019 и пытаюсь развернуть его на другом windows ноутбуке. На обоих ноутбуках установлена ​​64-разрядная Windows 10 версия, а на моем целевом ноутбуке установлена ​​/ обновлена ​​*. 1038 * Framework, vc_redist.x64.exe и DirectX.

In С точки зрения метода развертывания, я дословно следовал этому пошаговому руководству Microsoft , добавив шаг к тому, чтобы мой недавно созданный проект "setup" также был нацелен на платформу x64, поскольку некоторые внешние библиотеки в моем коде требовали x64. Результирующая пара «setup» .exe / .msi работает, как и планировалось, на исходном ноутбуке - устанавливается и запускается без излишеств.

Установка на целевом ноутбуке проходит нормально, но при запуске программы выдается ошибка, упомянутая в Название этого поста. После нескольких часов попыток выяснить это, я думаю, у меня есть идея, откуда возникла проблема, но сначала я поделюсь тем, что я пробовал , что в основном является каждой рекомендацией, найденной Поиск в коде этой ошибки:

  • чистая загрузка
  • SF C сканирование
  • chkdsk c: / f / r
  • repairing / fre sh установка всех платформ, упомянутых в первом абзаце
  • , с запуском как установщика приложения, так и установленного приложения в качестве администратора
  • перезапуск ноутбука и переустановка приложения после всех этих изменений

Как мне кажется, root проблемы:

В проекте установки / развертывания в VS три «обнаруженных зависимости» (MSVCP140D.dll) , ucrtbased.dll, VCRUNTIME140D.dll) имеют пути к файлам через… \ System32 \, а не идентичные зависимости, которые можно найти в… \ SysWOW64. Две другие обнаруженные зависимости - это внешние 64-битные библиотеки DLL (именно поэтому я указал весь свой проект на x64). Когда я запускаю свое приложение через Dependency Walker, оно соглашается с тем, что три ранее упомянутые зависимости являются «неправильным типом процессора», тогда как две последние подходят. Этот сценарий, однако, не объясняет мне, почему установка / запуск (вне VS) отлично работает на ноутбуке-источнике (, не должен ли он работать, если VS упаковывает смесь из 32 и 64-битных зависимостей? ). Фактически, запуск приложения через Dependency Walker на исходном ноутбуке показывает то же самое, что и на целевом ноутбуке - те же 3 зависимости являются «неправильным типом процессора», но приложение работает здесь.

Я не см. опцию в VS, чтобы изменить проект «setup» для чтения 64-битного пути к файлу. Я пытался вручную поменять местами 64-разрядные библиотеки DLL на разных этапах (включая перезагрузку компьютера между обменом DLL и запуском приложения), что, похоже, не дало никакого эффекта. На самом деле я попытался заменить 3 соответствующие библиотеки DLL в папке System32 на библиотеки DLL из папки SysWOW64 (моя идея дешевого обходного пути для невозможности изменить путь к файлу - просто изменить файл), и это просто заставило меня получить та же ошибка на моем исходном ноутбуке, что и на целевом ноутбуке.

Все эти вещи относительно новы для меня, поэтому, пожалуйста, дайте мне знать, если я по глупости упускаю некоторые фундаментальные детали из своего процесса / проект - на данный момент было бы хорошо, если бы это было так, и это легко исправить.

1 Ответ

0 голосов
/ 28 января 2020

Написал это до того, как заметил, что на вышеуказанный комментарий уже ответили. Просто оставив его внутри.

Двоичный отладочный файл : похоже, вы развернули отладочную версию своего двоичного файла (D в имени файла: MSVCP140D.dll). Попробуйте скомпилировать в Режим выпуска и развернуть новый двоичный файл.

Причина : для отладочных двоичных файлов обычно требуются отладочные версии * 1023 Бинарные файлы *VCRedist существуют на коробке, которую вы пытаетесь запустить, - они доступны только на ПК разработчика с установленным SDK (и / или Visual Studio). Это сообщение об ошибке: 0xc000007b означает "STATUS_INVALID_IMAGE_FORMAT" .


Советы : Здесь есть несколько ссылок на ресурсы и советы по устранению проблем развертывания .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...