Pregunta

A pesar de que es mi entendimiento de que no hay ninguna razón fundamental de un programa escrito para equipos de 32 bits / OS no se ejecute en hardware / OS, en la práctica, he encontrado muchos programas de 64 bits destinados a las versiones de 32 bits de Windows eso no funcionará en versiones de 64 bits de Windows. Los ejemplos incluyen una serie de utilidades de seguridad populares (la mayoría de los productos de Norton y la Zona de Control de alarma de punto) y varios juegos (que he estado tratando de conseguir GTA 4 para funcionar durante unas semanas, pero fue en vano - por supuesto, que podría estar relacionado con cualquier número de otros problemas relacionados con GTA4, pero eso es no viene al caso).

He oído que la incompatibilidad de un programa podría ser el resultado de algo tan simple como no queriendo correr desde la carpeta "Archivos de programa (x86)", pero ¿cuáles son algunas de las otras razones? ¿Por qué un antivirus o firewall escrito para un sistema de 32 bits no se ejecuta en un sistema de 64 bits? ¿Por qué un juego no se ejecuta cuando todo es teóricamente compatible hacia atrás?

¿Fue útil?

Solución

La mejor explicación que he encontrado se ofrecen aquí, que básicamente dice que los programas de 32 bits se ejecutan en una capa de emulación que no permite el acceso al sistema se obtendría a partir de los programas nativos se ejecutan en un entorno de 64 bits:

http://blogs.msdn.com/oldnewthing /archive/2008/12/22/9244582.aspx

Yo asumiría que esto significa que los problemas con programas como GTA4 provienen de la capa de emulación que no produce los resultados esperados se encuentran en un sistema nativo de 32 bits. Es por eso que seguir viendo las actualizaciones de compatibilidad comunicado de Microsoft todo el tiempo.

Esto es lo que el MSDN tiene que decir sobre el asunto:

http://msdn.microsoft.com/ en-us / library / bb427430 (VS.85) .aspx

Otros consejos

Hay una gran cantidad de información errónea en este hilo.

Cuando una aplicación de 32 bits que se ejecuta en Windows de 64 bits:

  • La mayor parte de los problemas de compatibilidad vienen cuando la aplicación intenta instalar un controlador en modo kernel. Un conductor de 32 bits no se puede instalar en el sistema operativo de 64 bits. Esta es sin duda la amost problema con un servidor de seguridad. Se trata de intentar enganchar en la pila de controlador de TCP / IP.
  • NO HAY EMULATOR! El código de objeto de 32 bits se ejecuta por la CPU completamente de forma nativa a la velocidad completa.
  • No hay soporte para código de 16 bits de edad. Esto rompió una gran cantidad de instaladores.
  • Acceso a las carpetas adecuadas es general no es un problema. Cuando un programa de 32 bits abre un archivo en, digamos% windir% \ system32 \, el sistema operativo automagicamente redirige a% windir% \ syswow64. Lo mismo para ciertas partes del registro. Hay algunas trampas potenciales aquí, pero son generalmente a lo largo de las líneas de suponer que varios WINAPI Obtener ... Directorio () devuelven las mismas cadenas que lo hacían en Windows 95.
  • Si se compiló hace 10 años o ayer mismo, entonces C / C ++ punteros siguen siendo de 32 bits (4 bytes) y todo el código que acaba de asumir que - incluyendo SendMessage ()! -- todavía funciona. El problema de puntero de 8 bytes no entra en la imagen hasta que comience a convertir a los compiladores de 64 bits.

Los conductores son una historia diferente que los programas: http://support.microsoft.com/kb/896456

Zona de alarma utiliza un controlador especial de 32 bits creado por Check Point para hacer el monitoreo. Esto es probablemente lo que está creando el problema con esa aplicación. En cuanto a GTA 4? No tengo ni idea.

Puede haber cualquier número de razones.

Cualquier aplicación que está programado anuncio un bajo nivel podría estar esperando registro de 32 bits. El controlador de alarma de la zona Publicado por novatrust es un buen ejemplo. GTA4 podría ser el uso de montaje para mejorar el rendimiento en varios puntos que podrían resultar en algo o incluso simplemente suponiendo 32 bits en C ++. Por ejemplo tomar el siguiente código:

struct GPoint
{
  int x;
  int y;
}

// Array of twenty GPoints
GPoint[] myArr = malloc(20 * sizeof(GPoint);

GPoint* myPointer = myArr;
int index = GetIndexAffectedPoint();

// Invert X and Y for the point
myPointer += 8*index;
swap(myPointer);

Sé que el ejemplo es bastante ingenua, pero de todos modos, en el que el código está asumiendo que estás estructura es de 8 bytes (4 bytes del número entero x y 4 bytes para el número entero y), pero en un sistema de 64 bits es en realidad el doble de tiempo por lo que terminan cambiando el punto equivocado ... ese tipo de cosas suceden mucho en idiomas bajo nivel, especialmente cuando se trata de mejorar el rendimiento ...

Las aplicaciones de seguridad son un mal ejemplo. Todos ellos realizan cosas sin apoyo contra las cosas sin papeles. Los cambios entre una versión de 32 bits de Windows a otra son suficientes para romperlas, no importa en movimiento a 64 bits.

Dicho esto, hay algunas cuñas de compatibilidad que Fixup su código en 32 bits que se no cuando la aplicación es 64 bits . Esto se debe a que Microsoft asume que ha probado en 64 bits.

Uno resultante Gotcha es con aplicaciones .NET . Cuando se ejecuta en un sistema de 32 bits, el exe es compilados JIT para 32-bits - donde hay compatibilidad cuñas para arreglar sus errores. Si el cliente pasa a estar en ejecución en un sistema de 64 bits, el ejecutable se compilados JIT a 64-bits, siempre que dichas cuñas de compatibilidad que estaban protegidos de uno mismo son no presente.

Chris Jackson tenía una entrada de blog bueno de esto: Aplicaciones noreferrer calce en Windows Vista de 64 bits

El problema es probablemente conductores. Con los juegos, es probable que algún tipo de esquema de DRM viscosa. Trate de conseguir la grieta no-CD en el juego para que pueda ejecutarlo sin DRM.

Si está utilizando el sistema de archivos o el Registro, asegúrese de que acceso a las carpetas correctas . Como programa x86 es probable que desee acceder a "Archivos de programa (x86)", "SysWOW64", "WOW6232Node" y dichas carpetas en lugar de los 64 bits.

Los productos con aplicaciones x86 como Norton y Check Point alarma de la zona de falla para ejecutar su conductor x86, como el conductor necesita x64 para poder corrió por el sistema operativo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top