Visual Studio 2010-Win32-App startet nicht auf Windows XP
Hatte ich zu schreiben, eine einfache Anwendung mit einigen spezifischen Anforderungen:
1. Es sollte bestehen aus nur einer exe-Datei, kein installer oder externe DLL
2. Es sollte klein sein
3. Es sollte laufen auf jedem Windows - (Win32) - Plattform (zumindest unter Windows XP), ohne dass änderungen an der Windows-installation (keine Abhängigkeiten .NET, JVM, MFC oder Visual Studio redistributables)
4. Es sollte eine einfache (dialog-basiert) UI
Ich beschlossen, es zu tun, wie Sie eine einfache Win32-Anwendung in C (C++) und nur die Verwendung der standardmäßigen win32-api, keine ausgefallene Sachen. Erstellt habe ich das Projekt mit Visual Studio 2010 auf 64-bit Windows 7 und geänderte Runtime-Bibliothek von Multi-threaded DLL nur für Multi-threaded. Ich dachte, das würde die meisten Windows-kompatiblen Applikation möglich.
Die kompilierte Anwendung funktioniert gut auf meinem Windows 7, aber ich kann es nicht starten auf jedem Windows-XP-PC. Ich habe versucht, sowohl auf Windows XP SP2 und SP3. Das merkwürdige ist, ich bekomme keine Fehlermeldung und keine Schurken Prozesse im aktivitätsmanager, passiert nichts, wenn ich Doppelklick auf die exe-Datei. Und es gibt keine DrWatson log produziert.
Ich habe die Target-Maschine in der Projekt-Einstellungen und es ist MachineX86.
Habe ich gegoogelt eine Menge über das problem, und der Tipp war zu ändern targetver.h, was ich getan habe, ohne Ergebnis. Dies ist, was mein targetver.h sieht aus wie jetzt:
#include <WinSDKVer.h>
#define _WIN32_WINNT _WIN32_WINNT_WINXP
#include <SDKDDKVer.h>
Ich habe auch versucht, dependency walker, aber es nur zeigt und Fehler für eine delay-loaded DLL genannt DWMAPI.DLL scheint ein Vista-DLL. Und auch Warnungen für die beiden anderen delay-loaded DLL ' s, MPR.DLL und SHLWAPI.DLL. Aber da Sie delay geladen, und ich glaube nicht, dass ich etwas in Ihnen sollte es nicht egal ist (googeln zeigt sich, dass diese Warnungen sollten ignoriert werden).
Mein Ziel ist es, in der Lage sein zu kompilieren eine exe-Datei, wird die Arbeit auf die XP-Maschinen, ohne irgendwelche änderung.
Können Sie eine "dumpbin /imports yourapp.exe" (wo "yourapp.exe" ist Ihr EXE-name)? Möglicherweise geben einige Hinweise darüber, welche DLLs fehlen. Auch der system-event-log wird in der Regel einige Informationen darüber, warum ein Prozess nicht gestartet werden konnte.
Sollte dies funktionieren. Sie teilten nicht alle code, so ist es schwer zu erraten, was falsch ist. Haben Sie versucht, eine einfache "hello world" - console-app, die statisch verknüpft ist mit der VC-runtime (wie Sie oben beschreiben). Bedeutet das nicht ausgeführt? Es ist durchaus möglich, Ihr Programm läuft auch Prima unter XP... bu tyou haben möglicherweise einen "bug", der bewirkt, dass es abbricht oder nicht-display-alles auf XP. Haben Sie versucht, Debuggen EXE auf XP mit einem debugger?
Haben Sie versucht, mit einer leeren app? Nur die grundlegenden win32-gui-Vorlage, app.
Vielen Dank für all die Tipps. Ich sah in dem Ereignis-log, aber es gibt überhaupt keinen Eintrag von der Zeit, wenn ich versuche zu starten meiner app. Ich habe versucht, den Bau der Standard-Vorlage Win32-app und es funktioniert erfolgreich auf Windows XP. Ich werde versuchen zu Folgen, selbies Spitze und verwenden Sie dumpbin.
InformationsquelleAutor Christoffer | 2012-02-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich das problem gelöst. Als ich sagte, ich Tat es als einfache Win32-ohne ausgefallene Sachen, es war nicht ganz wahr. Ich wollte nicht, dass die boaring pre-XP-look und fühlen sich beim laufen auf modernen Betriebssystemen, also fügte ich die folgenden Zeilen in die stdafx.h (ein Tipp, den ich im Netz gefunden):
Den Gründen, die ich nicht erwähnt habe war, dass hatte ich schon versucht zu entfernen, diese Zeilen, aber es funktioniert immer noch nicht (und ich kann immer noch nicht verstehen, warum es nicht funktioniert, wenn ich entfernt die Zeilen, versuchte ich es mehr als einmal).
Aber nach mehr Lesen Sie auf MSDN im Artikel fand ich, dass diese Linien muss vor dem include von windows.h, so dass ich es und jetzt funktioniert es (sowohl mit klassisch und xp-Stil)
So, das problem scheint zu sein, dass ich geändert, um 6-version von ComCtl32 auf der falschen Seite der include von windows.h, aber ich weiß immer noch nicht, warum es nicht funktioniert, wenn ich entfernt die Zeilen. Könnte Windows sein caching-das manifest in irgendeiner Weise?
InformationsquelleAutor Christoffer
Vielleicht brauchen Sie diese auf XP-Rechner: Microsoft Visual C ++ 2010 runtime
Ah, ich verpasst, dass. Ich würde immer noch installieren. Nur um auszuschließen, die Möglichkeit, dass einige Bibliotheken nicht statisch gelinkt.
InformationsquelleAutor dbrank0
Versuchen Sie, erstellen ein Programm, das ist statisch gelinkt, um die C-Runtime-Bibliothek.
Folgendermaßen in Ihr Projekt in Ihre Lösung: Gehen Sie zu Eigenschaften | Konfiguration | C/C++ | Code Generation | Laufzeit-Bibliothek.
Release: Ändern /MD /MT, Multithread.
Debug: Ändern /MDd /MTd, Debug Multithreaded.
Wenn Sie möchten, dass Sie die dynamische Verknüpfung, dann kopieren Sie den MSVC++ - runtime-Datei in deine XP-Maschine, wie vorgeschlagen von @dbrank(). Allerdings, du sagtest in deinem ersten post, dass Sie wollte, einen eigenständigen .exe-Datei ohne zusätzliche Dateien zu kopieren.
InformationsquelleAutor Phillip Ngan