У меня есть клиент / серверное приложение, которое я разрабатывал на одном ПК. Теперь ему нужны два последовательных порта, поэтому я позаимствовал компьютер у друга.
Когда я создаю свое приложение и пытаюсь запустить или отладить его (в Delphi IDE или из диспетчера файлов Windows), оно выдает сообщение об ошибке «Не удалось правильно запустить приложение (0xc000007b)».
Поиск в Google не вызывает особого интереса, но, похоже, указывает на то, что в Delphi нет ничего особенного и происходит с другими приложениями. Кажется, это вызвано вызовом 32-битной DLL из 64-битного приложения или наоборот.
- оба компьютера работают под управлением Windows 7, 64 бит
- оба имеют начальную версию Delphi Xe2, которая может обрабатывать только 32 бита
- Приложение отлично работает на моем компьютере, но не на моем друге
- Другие приложения Delphi отлично работают на обоих ПК
Кто-нибудь может дать мне подсказку, как это отследить?
STATUS_INVALID_IMAGE_FORMAT
. Вы не получите этого, когда система не может найти DLL с таким именем. Вы получаете,STATUS_INVALID_IMAGE_FORMAT
когда DLL может быть найдена, но она повреждена или имеет неправильную разрядность.Ответы:
Для начала я бы предложил проверить, есть ли проблема между вашим приложением и его зависимостями, используя средство обхода зависимостей.
источник
Зависимость времени загрузки не может быть разрешена. Самый простой способ отладки - использовать Dependency Walker . Используйте параметр «Профиль» для получения результатов диагностики процесса загрузки. Это определит точку отказа и должно привести вас к решению.
Самая частая причина этой ошибки - попытка загрузить 64-битную DLL в 32-битный процесс или наоборот.
источник
Это недостающий DLL. Возможно, ваша dll, которая работает с com-портами, имеет неразрешенную зависимость от dll. Вы можете использовать ходок зависимостей и отладчик Windows. Проверьте всю библиотеку mfc, например. Также вы можете использовать nrCommlib - это отличные компоненты для работы с ком-портами.
источник
Я перепробовал все указанные здесь вещи и нашел еще один ответ. Мне пришлось скомпилировать мое приложение с 32-битными DLL. Я собрал библиотеки как в 32-битной, так и в 64-битной
PATH
версии, но у меня был установлен 64-битный формат. После того, как я перекомпилировал свое приложение (с несколькими изменениями в моем коде), я получил эту ужасную ошибку и боролся в течение двух дней. Наконец, после попытки ряда других вещей, я изменил свой,PATH
чтобы иметь 32-битные DLL перед 64-битными DLL (они имеют одинаковые имена). И это сработало. Я просто добавляю это здесь для полноты.источник
В предыдущих ответах было упомянуто, что использование обходчика зависимостей - это путь, в моем случае (мое приложение продолжает сбой с кодом ошибки), обходчик зависимостей показал несколько dll, которые НЕ актуальны!
Наконец-то выяснилось, что я могу запустить профилирование, зайдя в меню «профиль», и оно запустит приложение и остановится на том же самом dll, который вызывает проблему! Я обнаружил, что 32-битная DLL была выбрана из-за пути и исправила ее.
источник
Недавно у меня возникла проблема, когда я разрабатывал приложение (в котором использовался последовательный порт), и оно работало на всех машинах, на которых я его тестировал, но несколько человек получали эту ошибку.
Оказывается, все машины, на которых произошла ошибка, работали под управлением Win7 x64 и никогда не обновлялись.
Запуск обновления Windows исправил все машины в моем конкретном случае.
источник
Я столкнулся с той же проблемой при разработке клиент-серверного приложения с использованием Microsoft Visual Studio 2012.
Если вы использовали Visual Studio для разработки приложения, вы должны убедиться, что новый (т. Е. Компьютер, на котором не было разработано программное обеспечение) имеет соответствующий распространяемый пакет Microsoft Visual C ++. В зависимости от ситуации вам нужна правильная годовая и битовая версия (т.е. x86 для 32-битной и x64 для 64-битной) распространяемого пакета Visual C ++.
Вот ссылка на распространяемый Visual C ++ для Visual Studio 2015 .
Вы можете проверить, какие версии установлены, перейдя в Панель управления -> Программы -> Программы и компоненты.
Вот как я получил эту ошибку и исправил ее:
1) Я разработал 32-разрядное приложение с использованием Visual Studio 2012 на своем компьютере. Давайте назовем мой компьютер ComputerA.
2) Я установил .exe и связанные файлы на другой компьютер, который мы назовем ComputerB.
3) На компьютере B я запустил .exe и получил сообщение об ошибке.
4) На ComputerB я посмотрел «Программы и компоненты» и не увидел распространяемого пакета Visual C ++ 2012 (x64).
5) На компьютере B я нашел Google Visual C ++ 2012 Redistributable, выбрал и установил версию x64.
6) На компьютере B я запустил .exe на компьютере B и не получил сообщение об ошибке.
источник
На самом деле эта ошибка указывает на неправильный формат изображения. Однако почему это происходит и что обычно означает код ошибки? На самом деле это может появиться, когда вы пытаетесь запустить программу, которая предназначена для или предназначена для работы с 64-битной операционной системой Windows, но ваш компьютер работает в 32-битной операционной системе.
Возможные причины:
Источник: http://www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/
источник
Это может быть случай, когда отладчик может быть полезен. По сути, если вы будете следовать инструкциям здесь, вы можете запустить два ide, и один будет отлаживать в другом. Если вы используете приложение в одном приложении, вы можете иногда обнаруживать ошибки, которые иначе пропустите. Стоит попробовать.
источник
Я видел ошибку при попытке запустить исполняемый файл отладки VC ++ на компьютере, на котором не установлен Visual C ++. Построение релизной версии и ее исправление.
источник
В моем случае ошибка произошла, когда я переименовал библиотеку DLL после ее создания (с помощью Visual Studio 2015), чтобы она соответствовала имени, ожидаемому исполняемым файлом, который зависел от библиотеки DLL. После переименования список экспортированных символов, отображаемый Dependency Walker, был пустым, и отображалось сообщение об ошибке «Приложение не удалось запустить правильно».
Так что это можно исправить, изменив имя выходного файла в параметрах компоновщика Visual Studio.
источник
Это может произойти, если вы пытаетесь указать приложению, что оно зависит от сборки Microsoft.Windows.Common-Controls . Это делается, когда вы хотите загрузить 6-ю версию библиотеки общих элементов управления, чтобы визуальные стили применялись к общим элементам управления.
Вы, вероятно, следовали оригинальной документации Microsoft еще со времен Windows XP и добавили следующее в манифест своего приложения:
Windows XP больше не является ОС, и вы больше не 32-разрядное приложение. За прошедшие 17 лет Microsoft обновила свою документацию ; Теперь пришло время обновить манифест:
У Раймонда Чена прекрасная история Общего контроля:
источник
Только что решил эту проблему для моего личного проекта (спасибо Dries за это). Для меня это было потому, что путь проекта был слишком длинным. После сохранения .sln по более короткому пути (C: / MyProjects) и компиляции оттуда он запустился без ошибок.
источник
Также загрузите и распакуйте «Зависимости» в ту же папку, куда вы положили wget.exe из
http://gnuwin32.sourceforge.net/packages/wget.htm
После этого у вас будет несколько файлов lib * .dll, а также wget.exe в той же папке, и все должно работать нормально.
(Я также ответил здесь https://superuser.com/a/873531/146668, который я первоначально нашел.)
источник
Я только столкнулся с этой проблемой. Я искал «C ++» в разделе «Приложения и функции» на панели управления Windows 10 и заметил, что какое-то обновление было запущено за несколько дней до этого и установил VC ++ Redistributable 2012-2017. Приложение, которое работало с сообщением об ошибке, требовало только VC ++ 2010. Я удалил их все, а затем переустановил только 2010 x86 / x64, и ошибка исчезла, и приложение функционировало, как и ожидалось.
источник
Это может произойти, если по какой-то причине ресурс x86 загружен с компьютера x64. Чтобы избежать этого, добавьте директиву препроцессора в stdafx.h (конечно, в моем примере проблемным ресурсом является DLL Common Controls DLL).
источник
processorArchitecture='*'
, и это все, что нужно сделать.Вполне возможно, что у вас есть несколько версий DLL в вашей системе. Вы можете искать вашу систему, чтобы узнать. Проблема может быть решена простым изменением порядка каталогов на вашем пути. Это была моя проблема. ( Невозможно запустить графический интерфейс Qt Creator за пределами Qt. Ошибка «Не удалось запустить приложение (0xc000007b)» )
источник