确保为32位Windows编写的程序与64位Windows兼容

Cha*_*nce 11 windows 64-bit backwards-compatibility

虽然我的理解是没有一个根本原因为32位硬件/操作系统编写的程序不能在64位硬件/操作系统上运行,但实际上,我发现很多程序都是针对32位版本的Windows而不是适用于64位版本的Windows.例子包括许多流行的安全实用程序(大多数产品来自Norton和Check Point的Zone Alarm)和几款游戏(我一直试图让侠盗猎车手4运行几周,但无济于事 - 当然,这可能与GTA4相关的任何其他问题有关,但这既不在这里也不在那里.

我听说程序的不兼容可能是因为不想从"Program Files(x86)"文件夹运行这么简单,但是还有什么其他原因?为什么为32位系统编写的病毒扫描程序或防火墙不能在64位系统上运行?当一切理论上都向后兼容时,为什么游戏不会运行?

Die*_*nte 7

这个帖子有很多错误的信息.

在64位窗口上运行32位应用程序时:

  • 当应用程序尝试安装内核模式驱动程序时,会出现大多数兼容性问题.无法在64位操作系统上安装32位驱动程序.这肯定是防火墙的问题.它试图挂钩到TCP/IP驱动程序堆栈.
  • 没有仿真器!32位目标代码由cpu完全本机地全速执行.
  • 不支持旧的16位代码.这打破了很多安装人员.
  • 访问正确的文件夹通常不是问题.当32位程序打开文件时,比如%windir%\ system32 \,操作系统会自动将其重定向到%windir%\ syswow64.对于注册表的某些部分也是如此.这里有一些潜在的陷阱,但它们通常是假设各种WINAPI Get ... Directory()函数返回它们在Windows 95中执行的相同字符串.
  • 无论是10年前还是昨天编译,那么C/C++指针仍然是32位(4字节)和所有假设的代码 - 包括SendMessage()! - 仍然有效.在您开始转换为64位编译器之前,8字节指针问题不会出现.


Jos*_*eph 4

我找到的最好的解释是这里提供的,它基本上说 32 位程序在模拟层上运行,该模拟层不允许您从在 64 位环境中运行的本机程序获得系统访问权限:

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

我认为这意味着 GTA4 等程序的问题来自于模拟层,无法产生 32 位本机系统上的预期结果。这就是为什么您不断看到 Microsoft 发布兼容性更新的原因。

以下是 MSDN 对此事的说明:

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

  • 不!32 位 Windows 程序不能在 64 位 Windows 上的模拟器中运行!有一个 Wow64 层,它重新解释系统调用,处理 32 位模式和 64 位模式之间的转换,重定向一些文件访问,但没有模拟器。当应用程序安装驱动程序时就会出现问题。 (2认同)