Приложение не смогло начать правильно (0xc000007b)

У меня есть клиент/серверное приложение, которое я разрабатывал на одном ПК. Теперь ему нужны два последовательных порта, поэтому я позаимствовал ПК у друга.

Когда я создаю свое приложение и пытаюсь запустить или отладить его (будь то в среде Delphi IDE или из диспетчера файлов Windows), это приводит к ошибкам "Приложение не смогло начать правильно (0xc000007b)".

Googling не вызывает многого, но, похоже, указывает, что это не что-то особенное Delphi и происходит с другими приложениями. Кажется, это вызвано вызовом 32-битной DLL из 64-битного приложения или наоборот.

  • оба компьютера: Windows 7, 64 бит
  • оба имеют стартовую версию Delphi Xe2, которая может обрабатывать только 32 бита
  • Приложение отлично работает на моем ПК, но не на моего друга.
  • Другие приложения Delphi отлично работают на обоих ПК.

Может ли кто-нибудь дать мне подсказку о том, как отслеживать это?

Ответ 1

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

Ответ 2

Невозможно разрешить зависимость времени загрузки. Самый простой способ отладить это - использовать Dependency Walker. Используйте параметр "Профиль" для получения результатов диагностики процесса загрузки. Это определит точку отказа и поможет вам найти решение.

Наиболее распространенной причиной этой ошибки является попытка загрузить 64-битную DLL в 32-разрядный процесс или наоборот.

Ответ 3

Это недостающая dll. Возможно, ваша DLL, которая работает с COM-портами, имеет нерешённую зависимость от dll. Вы можете использовать зависимый ходок и отладчик окон. Например, проверьте всю библиотеку mfc. Кроме того, вы можете использовать nrCommlib - отличные компоненты для работы с COM-портами.

Ответ 4

Я попробовал все, что указано здесь, и нашел еще один ответ. Мне пришлось скомпилировать мое приложение с 32-разрядными DLL. Я построил библиотеки как в 32-битных, так и в 64-битных, но мой PATH установил в 64-разрядные библиотеки. После того, как я перекомпилировал свое приложение (с рядом изменений в моем коде), я получил эту страшную ошибку и боролся в течение двух дней. Наконец, попробовав ряд других вещей, я изменил свой PATH на наличие 32-разрядных DLL перед 64-разрядными DLL (у них одинаковые имена). И это сработало. Я просто добавляю его здесь для полноты.

Ответ 5

В более ранних ответах упоминалось, что использование хоста зависимостей - это способ, в моем случае (мое приложение продолжает сбой с кодом ошибки), ходок зависимостей показал несколько dll, которые НЕ актуальны!

Наконец, выяснилось, что я могу выполнить профилирование, перейдя в "профиль", и он запустит приложение и остановится на точной DLL, которая вызовет проблему! Я обнаружил, что 32-битная dll была выбрана из-за пути и исправлена.

введите описание изображения здесь

Ответ 6

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

Оказывается, все машины, на которых произошла ошибка, выполняли Win7 x64 и обновлялись НИКОГДА никогда.

Запуск обновления Windows фиксировал все машины в моем конкретном случае.

Ответ 7

Фактически эта ошибка указывает на недопустимый формат изображения. Однако почему это происходит и что означает код ошибки? Фактически это может появиться, когда вы пытаетесь запустить программу, созданную или предназначенную для работы с 64-разрядной операционной системой Windows, но ваш компьютер работает на 32-разрядной операционной системе.

Возможные причины:

  • Microsoft Visual С++
  • Необходимо перезапустить
  • DirectX
  • .NET Framework
  • Необходимость повторной установки
  • Необходимость запуска приложения в качестве администратора

Источник: http://www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/

Ответ 8

У меня возникла та же проблема при разработке приложения клиент-сервер с использованием Microsoft Visual Studio 2012.

Если вы использовали Visual Studio для разработки приложения, вы должны убедиться, что новый (т.е. компьютер, на котором не было разработано программное обеспечение) имеет соответствующий распространяемый пакет Microsoft Visual С++. Соответственно, вам нужна правильная версия года и бит (то есть x86 для 32-разрядных и 64-разрядных 64-разрядных версий) распространяемого пакета Visual С++.

Распространяемые пакеты Visual С++ устанавливают компоненты времени выполнения, необходимые для запуска приложений на С++, созданных с использованием Visual Studio.

Вот ссылка на Visual С++ Redistributable для Visual Studio 2015.

Вы можете проверить, какие версии установлены, выбрав "Панель управления" → "Программы" - "Программы и функции".

Вот как я получил эту ошибку и исправил ее:

1) Я разработал 32-битное приложение, использующее Visual Studio 2012 на моем компьютере. Позвоните на мой компьютер ComputerA.

2) Я установил файл .exe и связанные файлы на другой компьютер, который мы будем называть ComputerB.

3) В ComputerB я запустил .exe и получил сообщение об ошибке.

4) В ComputerB я просмотрел программы и функции и не видел Redistributable (x64) Visual С++ 2012.

5) В ComputerB я googled для Visual С++ 2012 Распространяем и выбираем и устанавливаем версию x64.

6) В ComputerB я запустил .exe в ComputerB и не получил сообщение об ошибке.

Ответ 9

Это может быть случай, когда отладка отладчика может быть полезна. По существу, если вы следуете инструкциям здесь, вы можете запустить два ide, а один отладится в другой. Если вы не используете свое приложение в одном, вы иногда можете ловить ошибки, которые вы в противном случае пропустили. Его стоит попробовать.

Ответ 10

Я видел ошибку, пытающуюся запустить исполняемый файл VС++ debug на компьютере, на котором не было установлен Visual С++. Создание версии релиза и использование исправления.

Ответ 11

В моем случае ошибка произошла, когда я переименовал DLL после ее создания (используя Visual Studio 2015), чтобы он соответствовал имени, ожидаемому исполняемым файлом, который зависел от DLL. После переименования список экспортированных символов, отображаемых Dependency Walker, был пуст, и было отображено сообщение об ошибке "Приложение не удалось запустить правильно".

Таким образом, это можно было бы исправить, изменив имя выходного файла в параметрах компоновщика Visual Studio.

Ответ 12

Просто решил эту проблему для моего личного проекта (спасибо Dries для этого). Для меня это было потому, что путь к проекту был слишком длинным. После сохранения .sln на более короткий путь (C:/MyProjects) и компиляции оттуда он бежал без ошибки.

Ответ 13

Также загрузите и распакуйте "Зависимости" в ту же папку, где вы помещаете wget.exe из

http://gnuwin32.sourceforge.net/packages/wget.htm

После этого у вас будут файлы lib *.dll, а также wget.exe в той же папке, и он должен работать нормально.

(Я также ответил здесь https://superuser.com/a/873531/146668, который я изначально нашел.)

Ответ 14

Я просто столкнулся с этой проблемой. Я искал "С++" в своих "Приложениях и функциях" в панели управления Windows 10 и заметил, что какое-то обновление просто запустилось за несколько дней до этого и установило VС++ Redistributable 2012-2017. Приложение, которое запускалось в сообщение об ошибке, требовало только VС++ 2010. Я удалил все из них, а затем переустановил только 2010 x86/x64, и ошибка исчезла, и приложение функционировало, как ожидалось.

Ответ 15

Это может произойти, если по какой-либо причине ресурс x86 загружается с машины x64. Чтобы избежать этого явно, добавьте эту директиву препроцессора в stdafx.h(конечно, в моем примере проблемным ресурсом является DLL Windows Common Controls.

#if defined(_WIN64)
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df'\"")
#endif