Comment puis-je exécuter un exe en mode 32 bits sur une machine 64 bits?

18

J'ai un exécutable qui fonctionne bien lorsqu'il est exécuté sur des fenêtres 32 bits, mais se casse lorsqu'il est exécuté sur des fenêtres 64 bits.

Existe-t-il un moyen de le forcer à s'exécuter en mode 32 bits sur une machine 64 bits?

Je n'ai pas accès au code source.

Rory
la source
Cela n'a pas beaucoup de sens. Sauf si le logiciel a du code qui le fait explicitement échouer s'il n'est pas exécuté sur une machine 64 bits. 32 bits fonctionne bien sur 64 bits, le problème vient dans l'autre sens (64 bits sur 32 bits). Recevez-vous un message d'erreur?
Dave
3
Est-ce ce code que vous avez écrit (auquel cas Stack Overflow est l'endroit où demander - avec le code et les messages d'erreur), ou est-ce le programme de quelqu'un d'autre que vous exécutez? Il serait utile que vous incluiez les messages d'erreur que vous recevez.
ChrisF

Réponses:

16

Quelle réponse technique souhaitez-vous? Vous pouvez probablement forcer l'exe à toujours exécuter 32 bits avec quelques outils SDK, mais cela nécessite un peu de travail.

La réponse simple est de lancer à partir d'un processus 32 bits (par exemple, utiliser %SystemRoot%\SYSWOW64\cmd.exepour lancer).

Le plus complexe est de vérifier de quel type d'exe il s'agit, puis de le modifier vous-même. Le contexte ici est de comprendre que le code compilé à partir de langages qui fonctionnent directement avec les API Windows sont créés en 32 bits ou 64 bits au moment de la compilation par le développeur. Cela ne peut pas ensuite être modifié sans revenir au code source.

Cependant, de plus en plus d'applications sont écrites via une couche de virtualisation qui facilite l'écriture d'applications. Il en existe deux courants: .NET et Java. Je ne suis pas sûr de Java, sauf en sachant que forcer l'installation du bon runtime Java avec résoudre le problème.

Pour .NET, vous pouvez utiliser les outils SDK pour:

  • Valider que l'application est « AnyCPU »: corflags myExe.exe. En utilisant un utilitaire à partir du SDK .NET pour lire les en-têtes d'un assemblage .NET, pour un exe retournera quelque chose comme:
Version: v4.0.30319
En-tête CLR: 2,5
PE: PE32
CorFlags: 0x20003
SEUL: 1
32BITREQ: 0
32BITPREF: 1
Signé: 0

le 32BITREQme dit que c'est AnyCPUparce que 32 bits n'est pas requis.

  • Utilisez corflagsavec son /32BITREQ+option pour modifier l'exe en 32 bits uniquement.
Richard
la source
+1 Le paramètre .Net AnyCPU a été ma première pensée. Il suffit à un programmeur ignorant de ne pas spécifier correctement ce paramètre. C'est formidable d'entendre qu'il existe un moyen de le corriger après sa compilation.
Hand-E-Food
2
J'ai essayé de le lancer à partir de %SystemRoot%\SYSWOW64\cmd.exeet il a échoué de la même manière - affichant un message d'erreur - et lorsque j'archive TaskManager, mon processus exe ne s'affiche pas comme un processus 32 bits
Rory
1
Comme Dave l'a demandé ci-dessus, quel message d'erreur exact obtenez-vous?
Karan
5
Le lancement d'un EXE AnyCPU géré depuis le fait SYSWOW64\cmd.exetoujours fonctionner comme un processus 64 bits (je viens de l'essayer).
Carl Walsh
3

Si vous avez Windows 7 Professionnel (ou supérieur), utilisez le mode XP virtuel de Microsoft

cela émule (?) un environnement 32 bits, et il s'est avéré utile pour faire fonctionner certains anciens programmes 16 bits

SeanC
la source
0

J'ai tout essayé et rien n'a fonctionné. mais j'ai ensuite pensé à déplacer le répertoire gta iv des fichiers C / program (x86) vers les fichiers C / program et cela fonctionne puisque x86 est pour les applications 32 bits (je pense) mais a quand même fonctionné.

mdb
la source
0

Il existe en fait un moyen plus simple de gérer cela (pas une solution à long terme).

Déposez l'application "corflags.exe" dans le dossier \ windows \ system32. Ouvrez une ligne de commande en tant qu'administrateur et tapez ...

corflags "chemin et nom de l'exe" / 32BITPREF32 +

Cela forcera l'application à s'exécuter en tant que processus 32 bits au lieu de 64 bits.

Chris Kirkman
la source