Tengo un ejecutable que funciona bien cuando se ejecuta en Windows de 32 bits pero se rompe cuando se ejecuta en Windows de 64 bits.
¿Hay alguna manera de forzar su ejecución en modo de 32 bits en una máquina de 64 bits?
No tengo acceso al código fuente.
Respuesta1
¿Qué tan técnica quieres una respuesta? Probablemente puedas forzar que el exe se ejecute siempre en 32 bits con algunas herramientas del SDK, pero requiere un poco de trabajo.
La respuesta fácil es iniciar desde un proceso de 32 bits (por ejemplo, utilizar %SystemRoot%\SYSWOW64\cmd.exe
para iniciar).
Lo más complejo es comprobar qué tipo de exe es y luego modificarlo usted mismo. Los antecedentes aquí son comprender que el desarrollador crea el 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. Entonces 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 saber que forzar la instalación correcta del tiempo de ejecución de Java resuelve el problema.
Para .NET puede utilizar las herramientas SDK para:
- Validar que la aplicación sea "AnyCPU":
corflags myExe.exe
. Al usar una utilidad del SDK de .NET para leer los encabezados de un ensamblado .NET, un archivo ejecutable devolverá algo como:
Versión: v4.0.30319 Encabezado CLR: 2.5 PE: PE32 CorFlags: 0x20003 SOLO : 1 32BITREQ: 0 32BITPREF: 1 Firmado: 0
Me dice 32BITREQ
que esto se AnyCPU
debe a que no se requieren 32 bits.
- Úselo
corflags
con su/32BITREQ+
opción para modificar el archivo ejecutable para que sea solo de 32 bits.
Respuesta2
Si tiene Windows 7 Professional (o superior), utilice el modo XP virtual desdemicrosoft
esto emula (?) un entorno de 32 bits y ha demostrado ser útil para ejecutar algunos programas antiguos de 16 bits
Respuesta3
Intenté todo y nada funcionó. pero luego pensé en mover el directorio gta iv de los archivos de programa C/(x86) a los archivos de programa C/y funcionó ya que x86 es para aplicaciones de 32 bits (creo), pero funcionó de todos modos.
Respuesta4
En realidad, existe una forma más sencilla de solucionar esto (no es 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.