MFC Programm von XP auf VISTA

speedo77

Grünschnabel
Hallo,
ich habe mein MFC Programm in Visual Studio 2008 auf meinem XP Rechner programmiert. Wenn ich die auf dem XP Rechner lauffähige .exe Datei auf einem Vista Rechner ausführe, kommt folgende Fehlermeldung:

"Diese Anwendung konnte nicht gestartet werden, da die Side-By-Side-Konfiguration ungültig ist. Weiter Informationen finden Sie im Anwendungsereignisprotokoll."

Ich habe "Microsoft Visual C++ 2008 Redistributable Package(x86) installiert, leider bleibt die Fehlermeldung erhalten.

Vielen Dank für jede Hilfe! Gruß speedo
 
Zuletzt bearbeitet:

speedo77

Grünschnabel
Ich habe jetzt die Projekteinstellungen auf "Release" gestellt. Nachdem ich dann die Settings(Pfade,...) eingestellt habe ist es kompilierfähig. Montag teste ich das mal auf einem anderen Notebook.

Jetzt bleiben mir noch 2 Fragen offen:

- Wieso ist im debug-Modus das Programm nicht auf einem anderen Rechner lauffähig?
- Und was muss grundsätzlich auf einem neuinstallierten XP oder Vista Rechner installiert sein um eine MFC-Applikation zu starten?
 

SGSSGene

Erfahrenes Mitglied
Läuft das Programm im Debug Modus, sind in der .exe extra nformationen enthalten,um den Verlauf des Programmes zu beobachten und Fehler auf zu spüren. Es ist durchaus möglich im "Debug"-Mode erstellte Dateien auf anderen PC zum laufen zu bringen, Vorraussetzung wär ein VC oder du veränderst die Einstellung für den Debug Mode, ich kann dir leider nicht sagen welche.
MFC wird von Microsoft für Windows bereit gestellt, entsprechend läuft es nur auf Windows Rechner. Grundsätzlich sollte MFC Applicationen auf allen Windows Versionen funktionieren. Da du sagst das es nur uf XP oder Vista läuft, vermute ich es liegt ein "Unicode" Problem vor. Unicode wird erst ab XP(?) unterstützt, eine Applikation die Unicode fähig wird deswegen nicht unter Win98 laufen, man kann UniCode aber auch "deaktivieren", ich weiß aber nicht iwe.

mfg
SGSSGene
 

Endurion

Erfahrenes Mitglied
Das Problem bei Debug ist, dass dabei andere DLL-Dateien angesprochen werden. Diese Debug-DLL-Runtime-Dateien werden nur bei der Entwicklungsumgebung mitinstalliert. D.h. ein normaler User hat diese Dateien nicht.
Früher konnte man die Debug-DLLs einfach mitliefern, heute geht das nicht mehr so einfach (ist vielleicht auch besser so).

Unicode gibt es auch unter 95/98/usw., allerdings sind nicht alle Funktionen unterstützt. Auf der NT-Schiene ist es von Haus aus dabei. Und ab XP gibt es die Unterscheidung Gottseisgetrommelt nicht mehr (die 95er-Schiene ist tot).
 

speedo77

Grünschnabel
Ich habe nun ein lauffähiges Programm im Release-Modus erstellt:

- Visual Studio 2008
- MFC in einer gemeinsam genutzten DLL verwenden
- Release-Modus
- Multithreaded-DLL (/MD)

Mir bleiben aber noch ein 3 Fragen übrig.

1 - Wo kann ich EDITANDCONTINUE ausschalten?
1>ltilib7_d.lib(ltiException.obj) : warning LNK4075: /EDITANDCONTINUE wird aufgrund der Angabe von /OPT:ICF ignoriert.

2 - Wie behebe ich diese Warnmeldung?
1>LINK : warning LNK4098: Standardbibliothek "MSVCRTD" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.


3 - Wann benutze ich die Microsoft.VC90.CRT - DLL-Dateien und wann benutze ich die Microsoft.VC90.MFC - DLL-Dateien?
Weil ich möchte dass das Programm auch auf einem anderen Rechner läuft und dann muss ich ja die bestimmten DLL-Dateien mitliefen?!
 

Endurion

Erfahrenes Mitglied
1)
Projekt-Eigenschaften -> Konfigurationseigenschaften -> C/C++ -> allgemein -> Debuginformationsformat

3)
Microsoft.VC90.CRT, wenn du ein "reines" C/C++-Programm hast, Microsoft.VC90.MFC, wenn du MFC benutzt (was du machst)
 

speedo77

Grünschnabel
Danke Dir. Jetzt funktioniert mein Programm auf allen Rechnern, egal ob XP oder Vista.

Was mich jetzt noch wundert ist, warum ich in meiner Release-MFC Version zu meiner .exe-Datei "Microsoft.VC90.DebugCRT", "Microsoft.VC90.CRT" und "Microsoft.VC90.MFC" kopieren muss und nicht nur die Microsoft.VC90.MFC?

Datei:
3D-Laserscanner.exe.intermediate.manifest

Inhalt:
...
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC90.MFC' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
 

Endurion

Erfahrenes Mitglied
Ich vermute mal, dass die MFC-Runtimes auch auf der Standard-C-Runtime aufsetzen.

Ich kompiliere bei meinen MFC-Applikationen die Runtimes immer statisch dazu. Dann fällt das ganze blöde Gelumpe beim Verteilen weg.
 

Neue Beiträge