¿Cómo puedo ejecutar un exe en modo de 32 bits en una máquina de 64 bits?

18

Tengo un ejecutable que funciona bien cuando se ejecuta en ventanas de 32 bits pero se rompe cuando se ejecuta en ventanas de 64 bits.

¿Hay alguna forma de forzarlo a ejecutarse en modo de 32 bits en una máquina de 64 bits?

No tengo acceso al código fuente.

Rory
fuente
Esto no tiene mucho sentido. A menos que el software tenga algún código que explícitamente lo haga fallar si no se ejecuta en una máquina de 64 bits. 32 bits funciona bien en 64 bits, el problema es al revés (ejecuta 64 bits en 32 bits). ¿Recibe un mensaje de error?
Dave
3
¿Es este código que ha escrito (en cuyo caso, Stack Overflow es el lugar para preguntar, con el código y los mensajes de error), o es el programa de otra persona que está ejecutando? Sería útil si incluyera cualquier mensaje de error que esté recibiendo.
ChrisF

Respuestas:

16

¿Qué tan técnica quieres una respuesta? Probablemente pueda forzar al exe para que siempre ejecute 32 bits con algunas herramientas de SDK, pero requiere un poco de trabajo.

La respuesta fácil es iniciar desde un proceso de 32 bits (por ejemplo, usar %SystemRoot%\SYSWOW64\cmd.exepara iniciar).

Lo más complejo es verificar qué tipo de exe es, luego modificarlo usted mismo. El fondo aquí es comprender que el desarrollador crea código compilado de lenguajes que funcionan directamente con las API de Windows como 32 bits o 64 bits en el momento de la compilación. Esto no se puede cambiar sin volver al código fuente.

Sin embargo, cada vez más aplicaciones se escriben a través de una capa de virtualización que facilita la escritura de aplicaciones. Hay dos comunes: .NET y Java. No estoy seguro acerca de Java, excepto que sé que forzar la instalación correcta del tiempo de ejecución de Java resuelve el problema.

Para .NET puede usar las herramientas de SDK para:

  • Validar que la aplicación es "Cualquier CPU": corflags myExe.exe. Al usar una utilidad del SDK de .NET para leer los encabezados de un ensamblado de .NET, para un exe, se devolverá algo como:
Versión: v4.0.30319
Encabezado CLR: 2.5
PE: PE32
CorFlags: 0x20003
ILONLY: 1
32BITREQ: 0
32BITPREF: 1
Firmado: 0

el 32BITREQme dice que esto es AnyCPUdebido a 32 bits no es necesario.

  • Use corflagscon su /32BITREQ+opción para modificar el exe para que sea solo de 32 bits.
Ricardo
fuente
+1 La configuración de .Net AnyCPU fue mi primer pensamiento. Todo lo que se necesita es un programador inconsciente para no especificar esta configuración correctamente. Es genial saber que hay una manera de solucionarlo después de que se compila.
Hand-E-Food
2
Traté de iniciarlo %SystemRoot%\SYSWOW64\cmd.exey falló de la misma manera, mostrando un mensaje de error, y cuando verifico el TaskManager, mi proceso exe no se muestra como un proceso de 32 bits
Rory
1
Como Dave preguntó anteriormente, ¿qué mensaje de error exacto recibes?
Karan
55
El lanzamiento de un AnyCPU EXE administrado desde SYSWOW64\cmd.exetodavía hace que se ejecute como un proceso de 64 bits (lo acabo de probar).
Carl Walsh
3

Si tiene Windows 7 Professional (o superior), use el modo virtual XP de Microsoft

esto emula (?) un entorno de 32 bits y ha resultado útil para ejecutar algunos programas antiguos de 16 bits

SeanC
fuente
0

Intenté todo y nada funcionó. pero luego pensé en mover el directorio gta iv de los archivos C / program (x86) a C / program y funciona ya que x86 es para aplicaciones de 32 bits (creo) pero funcionó de todos modos.

mdb
fuente
0

En realidad, hay una manera más fácil de acomodar esto (no una solución a largo plazo).

Coloque la aplicación "corflags.exe" en la carpeta \ windows \ system32. Abra una línea de comando como administrador y escriba ...

corflags "ruta y nombre del exe" / 32BITPREF32 +

Esto obligará a la aplicación a ejecutarse como un proceso de 32 bits en lugar de 64 bits.

Chris Kirkman
fuente