2013-03-08 10 views
17

erstellt Ich erstellte eine Client-Server-Anwendung in C++ mit Visual Studio.Probleme beim Ausführen von EXE-Datei mit Visual Studio auf einem anderen Computer

Jetzt möchte ich die Client-exe-Datei auf einem anderen Computer ausgeführt werden (die nicht Visual Studio installiert ist) aber wenn ich die exe-Datei versuchen laufen gibt es folgende Fehlermeldung:

Diese Anwendung konnte nicht gestartet werden, weil die Anwendung Konfiguration nicht korrekt ist. Das erneute Installieren der Anwendung kann dieses Problem beheben.

Wie kann ich die EXE-Datei ausführen, ohne etwas auf dem Computer zu installieren?

+3

Hat der Computer die richtige Version funktioniert auf dem anderen Computer im Einsatz der C-Laufzeitbibliothek. Es ist sehr häufig die inlcude msvcrtXX.dll, wobei XX die Versionsnummer ist. in einem Installationspaket. –

Antwort

4

ich mein Programm in Release statt Debug- und die exe jetzt

2

Sieht aus, als ob einige DLL-Dateien fehlen. Stellen Sie sicher, dass Sie die entsprechenden DLLs zusammen mit exe kopieren.

+1

Es klingt, als ob er die VC++ - Laufzeit-DLLs vermisst. Er fragt, wie er eine EXE ohne sie senden kann und so hilft Ihre Antwort nicht. – Caesar

+0

Die Antwort hilft, wenn die fehlende Abhängigkeit nicht das verteilbare C++ ist. Sie erkennen, dass Programmierer alle Arten von DLLs verwenden können, nicht nur MSVC, oder? –

+0

@caesar nein, er sagte nicht, senden Sie eine .exe ohne sie, er sagte ohne * Installation * irgendetwas, so ist diese Antwort in Ordnung. – JBentley

4

Ich habe diesen spezifischen Fehler vorher nicht gesehen, normalerweise ist es ein Fehler um eine fehlende DLL (Windows redistributable). Angenommen, es gibt kein Problem mit der Konfiguration, haben Sie zwei Möglichkeiten:

1) Ändern Sie den Kompilierungsmodus von Multithread DLL in Multithread. Dies kann im Abschnitt C++ der Projekteigenschaften unter Codegenerierung erfolgen. Im Multithread-Modus wird Ihre Binärdatei statisch mit dem Windows-Redistributable verknüpft. Das ist wahrscheinlich das, was du willst.

2) Installieren Sie die Windows Redistributable auf dem Zielrechner. Dies ist wahrscheinlich nicht in Ordnung b/c Sie sagen, dass Sie nichts auf dem Zielcomputer installieren möchten.

Eine Warnung über Option 1, verschiedene Versionen von Windows haben unterschiedliche Versionen des Redistributable. Es ist möglich, auf eine hochspezialisierte Umgebung zu stoßen, in der sich ein statisch verknüpftes Programm nicht wie erwartet verhält.

+0

Es gibt mehr als zwei Optionen. Siehe Nayanas Antwort. – JBentley

18

Anwendungen, die mit Visual Studio erstellt werden, hängen von Visual C++ Redistibutable (VCRedist) ab. Wenn das Programm dynamisch verknüpft wird, benötigen Ihre Binärdateien MSVCR**.dll (Microsoft C-Laufzeitbibliothek).

Auf MSDN gibt es einen schönen Artikel Redistributing Visual C++ Files (for Visual Studio 2008) genannt, die dort heißt es, dass Mögliche Laufzeitfehler im Falle, dass Visual C++ erforderlich Bibliothek nicht installiert ist:

Sie bekommen können eine der folgenden Fehlermeldungen auf der Windows-Version abhängig von dem Sie versuchen, Ihre Anwendung auszuführen:

  • Die Anwendung konnte nicht ordnungsgemäß initialisiert werden (0xc0000135).
  • Diese Anwendung konnte nicht gestartet werden, da die Anwendungskonfiguration nicht korrekt ist. Das erneute Installieren der Anwendung kann dieses Problem beheben.
  • Das System kann das angegebene Programm nicht ausführen.
Grundsätzlich haben Sie zwei Möglichkeiten:
  • Die einfachste mögliche Lösung ist es, die dynamische Verknüpfung von Laufzeitbibliotheken zu statische Linken zu ändern. Gehe zu Projekteigenschaften und unter C/C++> Codegenerierung finden Sie Laufzeitbibliothek Option. Sie müssen es von Multi-threaded DLL (/MD) zu Multi-threaded (/MT) ändern.
  • Eine weitere mögliche Lösung besteht darin, sicherzustellen, dass die richtige Version von Microsoft VC++ Redistributable Package auf dem Zielcomputer installiert ist.

Aber Ihre Anwendung kann auch von anderen DLLs abhängen. Falls Sie wissen möchten, was die Abhängigkeiten des Programms sind, gibt es ein großes Dienstprogramm Dependency Walker genannt, die Sie in dieser und vielen anderen Situationen helfen :)

+3

+1 für die vorgeschlagene statische Verknüpfung. Das ist die wirkliche Antwort auf die Frage des OP (wie man läuft, ohne etwas zu installieren). 'hängt ab 'ist ein großartiges Werkzeug, um herauszufinden, welche Bibliotheken fehlen. –

+0

Ihr zweiter Punkt hilft dem OP nicht, weil sie als Einschränkung hat, dass sie nichts auf dem Zielrechner installieren kann. Es gibt auch mehr als zwei Lösungen - siehe Nayanas Antwort. – JBentley

+0

Sorry, aber ich kann nicht von DLL ändern. und ich versuche auch, die EXE-Datei auszuführen, ohne etwas auf dem anderen Computer zu installieren – Karen123456

10

Hintergrund:

  • C++ Anwendungen Benötigen Laufzeit-Assemblys (DLLs) in jedem Windows-Computer ausgeführt werden.
  • Normalerweise befinden sich diese Laufzeit-Assemblies im Verzeichnis C: \ Windows \ Winsxs.
  • Alle Windows-Betriebssysteme standardmäßig mit mehreren Laufzeit-Baugruppen.
  • Aber wenn Ihre Anwendung in neueren Version der Laufzeit-Assembly-Umgebung entwickelt, muss der Zielcomputer auch die gleiche Version der Laufzeit dort vorhanden sein.
  • Wenn Sie Visual Studio installieren, werden die meisten neueren Versionen von Laufzeit-Assemblys auf Ihrem Computer installiert.

soloution: schließlich durch sowieso Computer die genaue Laufzeit Baugruppen zielen sollte. Es gibt einige Möglichkeiten, dies zu tun (für weitere Details in Google suchen).

  1. Statische Verbindung Laufzeit-Baugruppen mit Ihrer Anwendung (für große Anwendung problematisch).
  2. Installieren Sie die C++ - Umverteilungsumgebung auf dem Zielcomputer (einfachste Methode).
  3. Erstellen eines Setup-Projekts zum Bereitstellen der Laufzeit auf dem Zielcomputer beim Installieren der Anwendung. (Nicht schlecht)
  4. Bereitstellen von Laufzeit Baugruppen als private Baugruppen (professionelle) sehen here für mehr Details

Bedingungen:

  • Sie müssen nicht .NET-Framework in Ihrer Anwendung verwenden.
  • Sie müssen nicht gemeinsame Sprache Laufzeitunterstützung für Ihre Anwendung verwenden
+0

Nie oder neuer? – BBagi

+0

@RuralJuror. Vielen Dank. Ich korrigierte es –

+0

Meiner Meinung nach sollte dies die akzeptierte Antwort sein, denn es ist die einzige, die die Option für private Baugruppen erwähnt. Einige der anderen Antworten sind einfach falsch, da sie angeben, dass es nur zwei Optionen gibt (und eine dieser Optionen ist für das OP nutzlos, da sie die Einschränkung hat, nichts auf dem Zielcomputer zu installieren). – JBentley