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.
Respuestas:
¿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.exe
para 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:
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:el
32BITREQ
me dice que esto esAnyCPU
debido a 32 bits no es necesario.corflags
con su/32BITREQ+
opción para modificar el exe para que sea solo de 32 bits.fuente
%SystemRoot%\SYSWOW64\cmd.exe
y 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 bitsSYSWOW64\cmd.exe
todavía hace que se ejecute como un proceso de 64 bits (lo acabo de probar).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
fuente
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.
fuente
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.
fuente