Ich habe eine Client / Server-App, die ich auf einem einzelnen PC entwickelt habe. Jetzt braucht es zwei serielle Schnittstellen, also habe ich mir einen PC von einem Freund ausgeliehen.
Wenn ich meine App erstelle und versuche, sie auszuführen oder zu debuggen (ob in der Delphi-IDE oder im Windows-Dateimanager), wird der Fehler "Die Anwendung konnte nicht korrekt gestartet (0xc000007b)" angezeigt.
Googeln bringt nicht viel hervor, scheint aber darauf hinzudeuten, dass dies nichts Delphi-spezifisches ist und mit anderen Apps passiert. Dies scheint durch den Aufruf einer 32-Bit-DLL aus einer 64-Bit-App oder umgekehrt verursacht zu werden.
- Beide PCs sind Windows 7, 64 Bit
- Beide haben die Delphi Xe2 Starter Edition, die nur 32 Bit verarbeiten kann
- Die App läuft gut auf meinem PC, aber nicht auf dem meines Freundes
- Andere Delphi-Apps laufen auf beiden PCs einwandfrei
Kann mir jemand einen Hinweis geben, wie ich das aufspüren kann?
STATUS_INVALID_IMAGE_FORMAT
. Sie erhalten das nicht, wenn das System keine DLL dieses Namens finden kann. Sie erhalten,STATUS_INVALID_IMAGE_FORMAT
wenn eine DLL gefunden werden kann, diese jedoch beschädigt ist oder die falsche Bitigkeit aufweist.Antworten:
Zu Beginn würde ich vorschlagen, mit dem Dependency Walker zu testen, ob zwischen Ihrer Anwendung und ihren Abhängigkeiten ein Problem besteht
quelle
Eine Ladezeitabhängigkeit konnte nicht aufgelöst werden. Der einfachste Weg, dies zu debuggen, ist die Verwendung von Dependency Walker . Verwenden Sie die Option Profil, um eine Diagnoseausgabe des Ladevorgangs abzurufen. Dies identifiziert den Fehlerpunkt und sollte Sie zu einer Lösung führen.
Die häufigste Ursache für diesen Fehler ist der Versuch, eine 64-Bit-DLL in einen 32-Bit-Prozess zu laden oder umgekehrt.
quelle
Es ist eine fehlende DLL. Möglicherweise hat Ihre DLL, die mit COM-Ports funktioniert, eine ungelöste DLL-Abhängigkeit. Sie können den Abhängigkeits-Walker und den Windows-Debugger verwenden. Überprüfen Sie zum Beispiel die gesamte MFC-Bibliothek. Sie können auch nrCommlib verwenden - es sind großartige Komponenten, um mit COM-Ports zu arbeiten.
quelle
Ich habe alle hier angegebenen Dinge ausprobiert und eine weitere Antwort gefunden. Ich musste meine Anwendung mit 32-Bit-DLLs kompilieren. Ich hatte die Bibliotheken sowohl in 32-Bit- als auch in 64-Bit-Versionen erstellt, aber
PATH
auf 64-Bit-Bibliotheken eingestellt. Nachdem ich meine Anwendung neu kompiliert hatte (mit einer Reihe von Änderungen in meinem Code), bekam ich diesen gefürchteten Fehler und kämpfte zwei Tage lang. Nachdem ich einige andere Dinge ausprobiert hatte, änderte ich meinePATH
32-Bit-DLLs vor den 64-Bit-DLLs (sie haben den gleichen Namen). Und es hat funktioniert. Der Vollständigkeit halber füge ich es hier hinzu.quelle
In früheren Antworten wurde erwähnt, dass die Verwendung von Dependency Walker der richtige Weg ist. In meinem Fall (meine Anwendung schlägt immer wieder mit dem Fehlercode fehl) zeigte Dependency Walker einige DLLs, die NICHT relevant sind!
Schließlich habe ich herausgefunden, dass ich die Profilerstellung ausführen kann, indem ich zum Menü "Profil" gehe. Dadurch wird die Anwendung ausgeführt und bei der genauen DLL angehalten, die das Problem verursacht! Ich fand heraus, dass eine 32-Bit-DLL aufgrund des Pfads ausgewählt und repariert wurde.
quelle
Ich hatte kürzlich ein Problem, bei dem ich eine Anwendung entwickelte (die eine serielle Schnittstelle verwendete), die auf allen Computern funktionierte, auf denen ich sie getestet habe, aber einige Leute haben diesen Fehler erhalten.
Es stellte sich heraus, dass auf allen Computern, auf denen der Fehler aufgetreten ist, Win7 x64 ausgeführt wurde und NIE EINMAL aktualisiert wurde.
Durch Ausführen eines Windows-Updates wurden alle Computer in meinem speziellen Fall behoben.
quelle
Ich hatte das gleiche Problem beim Entwickeln einer Client-Server-App mit Microsoft Visual Studio 2012.
Wenn Sie die App mit Visual Studio entwickelt haben, müssen Sie sicherstellen, dass auf dem neuen (dh dem Computer, auf dem die Software nicht entwickelt wurde) das entsprechende Microsoft Visual C ++ Redistributable Package vorhanden ist. Gegebenenfalls benötigen Sie die richtige Jahres- und Bitversion (dh x86 für 32 Bit und x64 für 64 Bit) des Visual C ++ Redistributable Package.
Hier ist ein Link zu Visual C ++ Redistributable für Visual Studio 2015 .
Sie können überprüfen, welche Versionen installiert sind, indem Sie auf Systemsteuerung -> Programme -> Programme und Funktionen klicken.
So habe ich diesen Fehler erhalten und behoben:
1) Ich habe mit Visual Studio 2012 eine 32-Bit-Anwendung auf meinem Computer entwickelt. Nennen wir meinen Computer ComputerA.
2) Ich habe die EXE-Datei und die zugehörigen Dateien auf einem anderen Computer installiert, den wir ComputerB nennen.
3) Auf ComputerB habe ich die EXE-Datei ausgeführt und die Fehlermeldung erhalten.
4) Auf Computer B habe ich mir die Programme und Funktionen angesehen und Visual C ++ 2012 Redistributable (x64) nicht gesehen.
5) Auf ComputerB habe ich nach Visual C ++ 2012 Redistributable gegoogelt und die x64-Version ausgewählt und installiert.
6) Auf ComputerB habe ich die EXE-Datei auf ComputerB ausgeführt und keine Fehlermeldung erhalten.
quelle
Tatsächlich weist dieser Fehler auf ein ungültiges Bildformat hin. Warum geschieht dies jedoch und was bedeutet der Fehlercode normalerweise? Dies kann tatsächlich auftreten, wenn Sie versuchen, ein Programm auszuführen, das für ein 64-Bit-Windows-Betriebssystem entwickelt wurde oder mit diesem arbeiten soll, Ihr Computer jedoch unter einem 32-Bit-Betriebssystem ausgeführt wird.
Mögliche Gründe:
Quelle: http://www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/
quelle
Dies kann ein Fall sein, in dem das Debuggen des Debuggers hilfreich sein kann. Wenn Sie den Anweisungen hier folgen , können Sie im Wesentlichen zwei Ideen ausführen, und eine debuggt in die andere. Wenn Sie Ihre Anwendung in einer aufheben, können Sie manchmal Fehler abfangen, die Sie sonst übersehen. Es ist einen Versuch wert.
quelle
Ich habe den Fehler beim Versuch gesehen, die ausführbare VC ++ - Debug-Datei auf einem Computer auszuführen, auf dem Visual C ++ nicht installiert war. Das Erstellen einer Release-Version und deren Verwendung haben das Problem behoben.
quelle
In meinem Fall trat der Fehler auf, als ich eine DLL nach dem Erstellen (mit Visual Studio 2015) umbenannte, sodass sie dem Namen entspricht, der von einer ausführbaren Datei erwartet wird, die von der DLL abhängt. Nach dem Umbenennen war die Liste der exportierten Symbole, die von Dependency Walker angezeigt wurden, leer und die Fehlermeldung "Die Anwendung konnte nicht korrekt gestartet werden" wurde angezeigt.
Es kann also behoben werden, indem der Name der Ausgabedatei in den Visual Studio-Linkeroptionen geändert wird.
quelle
Sie können dies haben, wenn Sie versuchen, Ihrer Anwendung zu zeigen, dass sie von der Microsoft.Windows.Common-Controls- Assembly abhängt . Sie tun dies, wenn Sie Version 6 der Bibliothek für allgemeine Steuerelemente laden möchten, damit visuelle Stile auf allgemeine Steuerelemente angewendet werden.
Sie haben wahrscheinlich die ursprüngliche Dokumentation von Microsoft aus Windows XP-Tagen befolgt und dem Manifest Ihrer Anwendung Folgendes hinzugefügt:
Windows XP ist nicht mehr das Betriebssystem und Sie sind keine 32-Bit-Anwendung mehr. In den letzten 17 Jahren hat Microsoft die Dokumentation aktualisiert . Jetzt ist es Zeit für Sie, Ihr Manifest zu aktualisieren:
Raymond Chen hat eine schöne Geschichte der Common Controls:
quelle
Habe gerade dieses Problem für mein persönliches Projekt gelöst (danke an Dries dafür). Für mich war es, weil der Projektweg zu lang war. Nachdem die .sln auf einem kürzeren Pfad (C: / MyProjects) gespeichert und von dort kompiliert wurde, lief sie ohne Fehler.
quelle
Laden Sie auch "Abhängigkeiten" herunter und entpacken Sie sie in denselben Ordner, aus dem Sie die Datei wget.exe ablegen
http://gnuwin32.sourceforge.net/packages/wget.htm
Sie haben dann einige lib * .dll-Dateien sowie wget.exe im selben Ordner und es sollte gut funktionieren.
(Ich habe auch hier https://superuser.com/a/873531/146668 geantwortet, was ich ursprünglich gefunden habe.)
quelle
Ich bin gerade auf dieses Problem gestoßen. Ich suchte unter "Apps & Features" in der Windows 10-Systemsteuerung nach "C ++" und stellte fest, dass erst einige Tage zuvor ein Update ausgeführt und VC ++ Redistributable 2012-2017 installiert wurde. Die App, auf der die Fehlermeldung ausgeführt wurde, erforderte nur VC ++ 2010. Ich habe alle deinstalliert und dann nur 2010 x86 / x64 neu installiert. Der Fehler wurde behoben und die Anwendung funktionierte wie erwartet.
quelle
Dies kann passieren, wenn aus irgendeinem Grund eine x86-Ressource von einem x64-Computer geladen wird. Um dies explizit zu vermeiden, fügen Sie diese Präprozessor-Direktive zu stdafx.h hinzu (in meinem Beispiel ist die problematische Ressource natürlich die Windows Common Controls-DLL.
quelle
processorArchitecture='*'
, und das ist alles.Möglicherweise haben Sie mehrere Versionen der DLL (s) auf Ihrem System. Sie können Ihr System durchsuchen, um dies herauszufinden. Das Problem kann gelöst werden, indem Sie einfach die Reihenfolge der Verzeichnisse in Ihrem Pfad ändern. Das war mein Problem. ( Qt Creator-GUI kann nicht außerhalb von Qt ausgeführt werden. Fehler "Die Anwendung konnte nicht korrekt gestartet werden (0xc000007b)" )
quelle