Wie kann ich eine Exe im 32-Bit-Modus auf einem 64-Bit-Computer ausführen?

18

Ich habe eine ausführbare Datei, die in 32-Bit-Fenstern einwandfrei funktioniert, aber in 64-Bit-Fenstern nicht funktioniert.

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.

Rory
quelle
Das ergibt wenig Sinn. Es sei denn, die Software verfügt über Code, der explizit zum Fehlschlagen führt, wenn er nicht auf einem 64-Bit-Computer ausgeführt wird. 32-Bit läuft gut auf 64-Bit, das Problem ist umgekehrt (64-Bit auf 32-Bit). Erhalten Sie eine Fehlermeldung?
Dave
3
Haben Sie diesen Code geschrieben (in diesem Fall müssen Sie nach Stack Overflow fragen - mit dem Code und den Fehlermeldungen), oder führen Sie ein anderes Programm aus? Es wäre hilfreich, wenn Sie Fehlermeldungen einfügen würden, die Sie erhalten.
ChrisF

Antworten:

16

Wie technisch soll die Antwort sein? Sie können die exe wahrscheinlich zwingen, immer 32-Bit mit ein paar SDK-Tools auszuführen, dies erfordert jedoch ein wenig Arbeit.

Die einfache Antwort ist, von einem 32-Bit-Prozess aus zu starten (z. B. %SystemRoot%\SYSWOW64\cmd.exezum Starten verwenden).

Umso komplexer ist es, zu überprüfen, um welche Art von Datei es sich handelt, und sie dann selbst zu ändern. Hintergrund ist, zu verstehen, dass kompilierter Code aus Sprachen, die direkt mit den Windows-APIs zusammenarbeiten, vom Entwickler zur Kompilierungszeit als 32-Bit- oder 64-Bit-Code erstellt wird. Dies kann dann nicht geändert werden, ohne zum Quellcode zurückzukehren.

Zunehmend werden Anwendungen jedoch über eine Virtualisierungsebene geschrieben, die das Schreiben von Anwendungen erleichtert. Es gibt zwei gebräuchliche: .NET und Java. Ich bin mir bei Java nicht sicher, außer zu wissen, dass das Erzwingen der richtigen Java-Laufzeitinstallation das Problem löst.

Für .NET können Sie SDK-Tools verwenden, um:

  • Validate , dass die Anwendung ist „AnyCPU“: corflags myExe.exe. Wenn Sie ein Dienstprogramm aus dem .NET SDK verwenden, um die Header einer .NET-Assembly zu lesen, gibt eine exe etwa Folgendes zurück:
Version: v4.0.30319
CLR-Header: 2.5
PE: PE32
CorFlags: 0x20003
ILONLY: 1
32BITREQ: 0
32BITPREF: 1
Signiert: 0

das 32BITREQsagt mir das liegt AnyCPUdaran das 32bit nicht benötigt wird.

  • Verwenden Sie corflagsmit seiner /32BITREQ+Option , um die exe zu ändern 32bit nur zu sein.
Richard
quelle
+1 Die .Net AnyCPU-Einstellung war mein erster Gedanke. Es ist nur ein unbekannter Programmierer erforderlich, um diese Einstellung nicht richtig anzugeben. Es ist toll zu hören, dass es eine Möglichkeit gibt, das Problem zu beheben, nachdem es kompiliert wurde.
Hand-E-Food
2
Ich habe versucht, es von zu starten, %SystemRoot%\SYSWOW64\cmd.exeund es ist auf die gleiche Weise fehlgeschlagen - es wird eine Fehlermeldung angezeigt - und wenn ich im TaskManager einchecke, wird mein exe-Prozess nicht als 32-Bit-Prozess angezeigt
Rory
1
Wie Dave oben gefragt hat, welche genaue Fehlermeldung erhalten Sie?
Karan
5
Wenn Sie eine verwaltete AnyCPU-EXE-Datei von SYSWOW64\cmd.exenoch aus starten, wird sie als 64-Bit-Prozess ausgeführt (ich habe es gerade versucht).
Carl Walsh
3

Wenn Sie Windows 7 Professional (oder höher) verwenden, verwenden Sie den virtuellen XP-Modus von Microsoft

Dies emuliert (?) eine 32-Bit-Umgebung und hat sich als nützlich erwiesen, um einige alte 16-Bit-Programme zum Laufen zu bringen

SeanC
quelle
0

Versuchte alles und nichts hat funktioniert. aber dann überlegte gta iv verzeichnis von den c / program files (x86) nach c / program files zu verschieben und es funktioniert da x86 für 32bit apps ist (glaube ich) aber trotzdem funktioniert.

mdb
quelle
0

Es gibt tatsächlich einen einfacheren Weg, dies zu erreichen (keine langfristige Lösung).

Legen Sie die Anwendung "corflags.exe" im Ordner \ windows \ system32 ab. Öffnen Sie eine Befehlszeile als Administrator und geben Sie Folgendes ein ...

corflags "Pfad und Name der exe" / 32BITPREF32 +

Dadurch wird die Ausführung der Anwendung als 32-Bit-Prozess anstelle von 64-Bit erzwungen.

Chris Kirkman
quelle