Ich habe eine ausführbare Datei, die unter 32-Bit-Windows einwandfrei funktioniert, unter 64-Bit-Windows jedoch abstürzt.
Gibt es eine Möglichkeit, die Ausführung im 32-Bit-Modus auf einem 64-Bit-Computer zu erzwingen?
Ich habe keinen Zugriff auf den Quellcode.
Antwort1
Wie technisch soll die Antwort sein? Sie können die EXE wahrscheinlich mit ein paar SDK-Tools dazu zwingen, immer in 32 Bit zu laufen, aber das erfordert ein wenig Arbeit.
Die einfache Antwort besteht darin, von einem 32-Bit-Prozess aus zu starten (z. B. %SystemRoot%\SYSWOW64\cmd.exe
zum Starten verwenden).
Komplexer ist es, zu prüfen, um welche Art von EXE es sich handelt, und sie dann selbst zu ändern. Hintergrund ist hier, dass kompilierter Code aus Sprachen, die direkt mit den Windows-APIs arbeiten, vom Entwickler zur Kompilierzeit als 32-Bit oder 64-Bit erstellt wird. Dies kann dann nicht geändert werden, ohne zum Quellcode zurückzukehren.
Allerdings werden Anwendungen zunehmend über eine Virtualisierungsschicht geschrieben, die das Schreiben von Anwendungen erleichtert. Es gibt zwei gängige Schichten: .NET und Java. Bei Java bin ich mir nicht sicher, weiß aber, dass das Erzwingen der richtigen Java-Runtime-Installation das Problem löst.
Für .NET können Sie SDK-Tools für Folgendes verwenden:
- Überprüfen Sie, ob die Anwendung „AnyCPU“ ist:
corflags myExe.exe
. Wenn Sie ein Dienstprogramm aus dem .NET SDK verwenden, um die Header einer .NET-Assembly zu lesen, wird für eine EXE-Datei etwas wie Folgendes zurückgegeben:
Version: v4.0.30319 CLR-Header: 2,5 PE: PE32 CorFlags: 0x20003 Ich allein: 1 32BITREQ: 0 32BITPREF: 1 Signiert: 0
das 32BITREQ
sagt mir, dass das AnyCPU
daran liegt, dass 32 Bit nicht erforderlich sind.
- Verwenden Sie
corflags
die/32BITREQ+
Option, um die EXE so zu ändern, dass sie nur 32 Bit umfasst.
Antwort2
Wenn Sie Windows 7 Professional (oder höher) haben, dann verwenden Sie den virtuellen XP-Modus vonMicrosoft
Dies emuliert(?) eine 32-Bit-Umgebung und hat sich als nützlich erwiesen, um einige alte 16-Bit-Programme zum Laufen zu bringen
Antwort3
Habe alles versucht und nichts hat funktioniert. Aber dann habe ich darüber nachgedacht, das Verzeichnis gta iv von C/Programme (x86) nach C/Programme zu verschieben, und es hat funktioniert, da x86 für 32-Bit-Apps ist (glaube ich), aber es hat trotzdem funktioniert.
Antwort4
Es gibt tatsächlich einen einfacheren Weg, dies zu bewältigen (keine langfristige Lösung).
Legen Sie die Anwendung „corflags.exe“ in den Ordner \windows\system32. Öffnen Sie eine Befehlszeile als Administrator und geben Sie ein …
corflags "Pfad und Name der EXE" /32BITPREF32+
Dadurch wird die Anwendung gezwungen, als 32-Bit-Prozess statt als 64-Bit-Prozess ausgeführt zu werden.