Programmausführung auf anderen Rechnern
-
Hi,
ich habe hier ein kleines Problem. Ich habe ein Projekt bestehend auf einem Win32-Anwendung und 5 eigenen DLL's. Diese komplette Anwendung würde ich nun gerne weitergeben. Leider läuft das Programm weder in DEBUG noch in RELEASE Konfiguration auf anderen Rechner. Beim starten bekomme ich immer die Fehlermeldung:Diese Anwendung konnte nicht gestartet werden, weil die Anwendungskonfiguration nicht korrekt ist. Zur Problembehebung sollten Sie die Anwendung neu installieren.
Ok. Also erstmal im Internet recherchiert, und rausgefunden, dass die wohl mit den C++-Laufzeitbibiliotheken zusammen hängt. Eine Seite auf die ich immer wieder in dem Zusammenhang gefunden habe war:
http://www.codeproject.com/cpp/vcredists_x86.asp#StaticLinking
Zugegeben. Mein Englisch ist mäßig. Ich habe versucht den dortigen Text zu verstehen und umzusetzten, was mir nur teilweise gelungen ist.
So wie ich das sehe, bekommen ich die Meldung wenn die Laufzeitbibiliotheken dynamisch und nicht statisch gelinkt sind. Nun habe ich in allen 6 Teilprojekten die Laufzeitbibiliothek auf Multithreaded (/MT) eingestellt. Folglich sollten diese dann statisch gelinkt werden.
Doch das scheint nicht zu funktionieren. Auf dem Zielrechner habe ich trotzdem einmal zusätzlich die Visual++-Laufzeitbibiliotheken (x86) und das .NET Framework 2.0 installiert. Wobei ich letzteres für Schwachsinn halte, da ich keinen managed Code erzeugt habe.
Immer noch unklar ist mir die Bedeutung der manifest-Dateien. Der Compiler ist so eingestellt dass er mir diese generiert, und für jedes Projekt erhalte ich 2 Dateien:
ProjektName.exe.embed.manifest
Projektname.exe.intermediate.manifest
Ob diese vorhanden sind oder nicht ändert nichts daran, dass ich die Anwendung nicht starten kann. Ich bekomme immer die gleiche Fehlermeldung. Lokal auf dem Entwicklungssystem funktioniert es jedoch problemlos.
Irgendjemand eine Idee, wie ich weiter vorgehen sollte? Am liebsten wäre es mir, wenn ich wirklich alles statisch gelinkt habe, so dass im Anwenderverzeichniss später nur eine .EXE und 5 .DLL drinnen sind.
Ich verwende Visual Studio 2005 Standard unter XP.
-
Hast Du mit Sicherheit statisches Linken eingestellt.
Öffne Depends.EXE und schau Dir an welche DLLs benötigt werden.
Evtl. musst Du VCredist_x86.exe erst auf dem Zielrechner ausführen.
Die beiden Manifest Dateien musst Du nicht mit kopieren. Wie ich das sehe, hast Du das System instruiert die Manifeste einzubetten.
Schau mal in die Ereignis-Protokolle Deines Rechers. Dort wird explizit stehen welche DLLs vermisst werden.
-
Danke. Habe den Fehler mitlerweile gefunden. Der Dependency Walker zeigte mit die Debug-DLL der Laufzeitbibiliothek an. Klar, das diese auf dem Zielrechner nicht vorhanden war.
Es schien irgendwie mit den Compileroptionen zusammenzuhängen, doch leider weiss ich nicht woran, denn den schulldigen kann ich nicht mehr ausmachen, jetzt wo es plötzlich funktioniert.
Was mich in dem Zusammenhang nur wundert ist, dass ich definitiv Multithreaded eingestellt hatte, also erwartet habe, dass er mir die release-Version statisch linkt. Intressanterweise hat er die Debug-Version dynamisch gelinkt. Welche Einstellungen können ein solchen Verhalten bewirken, bzw wann linkt der Compiler welche Version?
-
Project/Properties/Configuration Properties/C/C++/Code Generation/Runtime Library