Frage

My C (++) Programm, geschrieben und mit Visual C (++) / Visual Studio kompiliert, läuft auf meinem eigenen Rechner in Ordnung, aber sich weigert, auf einer anderen Maschine laufen zu lassen. Die Fehlermeldung, die ich bekommen ist „Diese Anwendung kann nicht gestartet hat, weil die Anwendungskonfiguration falsch ist. Kann dieses Problem beheben, die Anwendung erneut zu installieren.“

War es hilfreich?

Lösung

Wenn Sie ein C ++ Programm schreiben, verknüpft sie dynamisch an die C-Laufzeitbibliothek oder CRT kurz. Diese Bibliothek enthält Ihre printf, Ihre malloc, Ihre strtok, etcetera. Die Bibliothek wird in der Datei mit dem Namen MSVCR80.dll enthalten. Diese Datei ist nicht standardmäßig auf einem Windows-System installiert ist, daher kann die Anwendung nicht ausgeführt werden.

Die Lösung? Installieren Sie entweder die DLL auf dem Zielcomputer durch Vcredist.exe (das Visual C ++ Redistributable Package) oder Link auf die CRT statisch (stecken Sie den eigentlichen Code für die verwendeten Funktionen direkt in Ihre EXE).

Die Verteilung und Installation vcredist zusammen mit einer einfachen Anwendung ist ein Schmerz in den Arsch, so ging ich für die zweite Option: statische Linken. Es ist wirklich einfach: Gehen Sie auf Ihr Projekt Eigenschaften entfalten C / C ++, klicken Sie auf Code-Generierung, und stellen Sie die Laufzeitbibliothek zu einer der nicht-DLL-Optionen. Das ist alles dort ist zu ihm.

Andere Tipps

Das Problem hier ist eine fehlende DLL-Abhängigkeit, wie die CRT (C Runtime Library). Ein gutes Werkzeug für die Diagnose dieser Art von Problem ist Dependency Walker (depends.exe), die Sie hier finden:

http://www.dependencywalker.com/

Sie würden dieses Programm auf dem Computer ausführen, der die Fehlermeldung erzeugt Sie auf dem Laufenden, und es verwenden, die exe zu öffnen, die diesen Fehler erzeugen, beitragen. Dependency Walker schnell und grafisch anzuzeigen, alle DLLs, die erforderlich sind, aber nicht auf der Maschine.

Die Chancen sind hoch, dass Sie die Laufzeitbibliotheken von Visual Studio (CRT unter anderem) verpasst haben, können Sie entweder von diesen Abhängigkeiten zu befreien (Link statisch) oder die VC redist Pakete auf dem Zielcomputer installiert werden.

Abhängig von der Visual C ++ Version, die Sie verwenden, müssen Sie verschiedene Pakete installieren:

Visual C ++ 2005

Visual C ++ 2005 SP1

Visual C ++ 2008

Warnung : diese Pakete enthalten nur Release-Versionen der Bibliotheken, wenn Sie Debug Ihrer Anwendung baut verteilen können, wollen werden Sie kümmern sich um die selbst DLL erforderlich nehmen müssen.

Es ist viel einfachsten ist statisch nach der Laufzeit zu verbinden.

c ++ -> Code Generation -> Laufzeitbibliothek und wählen Sie "Multi-Threaded / MT"

Allerdings bedeutet dies die ausführbare Datei ein paar hundert KByte größer. Dies könnte ein Problem sein, wenn Sie eine große Anzahl von kleinen Programmen installieren, da jeder durch seine eigene Kopie der Laufzeit belastet wird. Die Antwort ist ein Installationsprogramm zu erstellen.

Neues Projekt -> "Einrichtung und Bereitstellung" -> "Setup-Projekt"

Laden Sie die Ausgabe von Ihren Anwendungsprojekten (definierten die DLL-Version der Laufzeit verwendet wird) in das Installer-Projekt und baut es. Die Abhängigkeit von der Laufzeit-DLL wird im Installationspaket bemerkt, enthalten sein und ordentlich und unauffällig an der richtigen Stelle auf dem Zielcomputer installiert ist.

Die korrekte VC Redist-Paket für Sie ist Teil Ihrer Visual Studio-Installation. Für VC 8, können Sie es finden Sie hier:

\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86

MÖGLICHE LÖSUNG ........

EDIT: (die meisten meiner Post entfernt) Lange Rede kurzer Sinn, ich habe ähnliche Probleme, die „Anwendungskonfiguration falsch“ Abrufen von Nachrichten, etc etc. Depends.exe finden war nur ieshims.dll und wer.dll wie mögliche Probleme, aber das ist nicht das Problem. Ich landete mit dem Multithreaded (/ mt) kompilieren Option. Was hat sich zwar gearbeitet, als eine praktikable Lösung, macht einen Installer mit Installshield. Ich habe mehrere Mergemodule in Install Builder ausgewählt und das scheint mein Problem behoben zu haben. Die Module wurden ausgewählt: VC ++ 9.0 CRT, VC ++ 9.0 DEBUG CRT und die CRT WinSxS MSM merge-Modul. Ich bin mir ziemlich sicher, dass seine die WinSxS Modul verschmelzen, dass es behoben hat.

DEBUG CRT: Ich habe bemerkt, dass irgendwo (egal wie hart ich versuchte, und offensichtlich bisher nicht), meine Freigabe-Version auf dem DEBUG CRT noch abhing. Wenn dies immer noch der Fall ist, jetzt das Install Mergemodul die DEBUG CRT Ordner in meinem WinSxS Ordner abgelegt hat :) Als ein wenig von einem Anfänger mit VC ++ Ich gehe davon aus, dass dies normalerweise verwendet werden, um Debug-Versionen Ihrer Programme an anderen Personen zu verteilen. Um zu testen, ob das ist, was mein Problem behoben ich den DEBUG CRT-Ordner aus dem Ordner WinSxS entfernt und die Anwendung noch gearbeitet. (Es sei denn, etwas läuft noch im Hintergrund etc etc - ich bin nicht so hinein)

Wie auch immer, dies wurde es für mich auf einer XP SP3 vollständig aktualisiert Maschine arbeiten, und auf auch eine VMWare XP SP3 Maschine mit den bloßen Knochen (.net 3.5 und VC ++ 2008 RTM im Grunde) - und auch auf einem XP Gefährtin Maschine wo es vorher nicht funktioniert.

Also diese Dinge zu versuchen, könnten Sie etwas Glück haben.

Das erste, was müssen Sie verwenden

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1

oder fügen Sie _BIND_TO_CURRENT_VCLIBS_VERSION=1 den Präprozessordirektiven.

Das Problem der Bindung und der offensichtlichen Arten verwandt ist, können Sie mehr http://www.nuonsoft.com/blog/2008/10/29/binding-to-the-most-recent-visual-studio-libraries/

Durch diese Anwendung tun wird mit einer größeren Palette von Runtime laufen Bibliotheken Versionen.

Oft dieser Fehler ist das Ergebnis des Versuchs, die Debug-Version einer Anwendung auszuführen, die .NET verwendet. Da die .NET Redistributable die Debug-Versionen des DLLs nicht enthalten, die mit Visual Studio installiert sind, wird oft die Anwendung diese Fehler erhalten, wenn es auf einem anderen Computer ausgeführt wird, die nicht von Visual Studio installiert ist. Wenn Sie nicht bereits haben, versuchen Sie eine Release-Version Ihrer Anwendung erstellen und sehen, ob das funktioniert.

Beachten Sie auch -, dass, wenn Sie auf statische Laufzeit ändern, werden Sie das gleiche für MFC zu tun haben, wenn Ihre Anwendung MFC verwendet. Diese Einstellungen sind in Eigenschaften-> Konfiguration / Allgemein

Ich lief in dieses Problem und konnte es beheben sehr einfach.

Visual Studio gibt Ihnen die Option (standardmäßig aktiviert) ein Manifest für jeden Build zu bauen.

Das Manifest wurde in den Release-Ordnern speichern, aber es war ein anderer Release-Ordner als die exe.

Auch wenn der Setup-Dienstprogramme verwendet es nicht verpackt.

Sie sollten für einen Dateinamen so etwas wie myprogram.exe.indermediate.manifest aussehen

Wenn diese im selben Ordner wie die exe ist (und Sie haben alle DLLs) sollte es laufen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top