64 位版本的 Windows 上 32 位程序的兼容性注意事项概述

本文讨论在 64 位版本的 Windows 上运行的 32 位程序的兼容性注意事项和限制。

原始 KB 数: 896456

总结

64 位版本的 Windows 使用 Microsoft windows-32-on-Windows-64 (WOW64) 子系统运行 32 位程序,而无需修改。 64 位版本的 Windows 不支持 16 位二进制文件或 32 位驱动程序。 依赖于 16 位二进制文件或 32 位驱动程序的程序无法在 64 位版本的 Windows 上运行,除非程序制造商为程序提供更新。

可能存在影响程序兼容性或性能的注意事项。 可以通过在 64 位版本的 Windows 之一上测试程序来确定程序是否具有兼容性或性能问题。

本文介绍在 64 位版本的 Windows 上运行 32 位程序的一些兼容性注意事项。 本文不比较 32 位和 64 位版本的 Windows 或不同的 64 位操作系统。 本文假定你了解 32 位二进制文件和 64 位二进制文件之间的差异。

简介

基于 x64 的 Microsoft Windows 版本经过优化,可以运行本机 64 位程序。 此外,基于 x64 的 Windows 版本使用 WOW64 子系统运行 32 位程序。

运行 32 位程序

WOW64 子系统允许 32 位程序在不修改基于 x64 的 Windows 版本上运行。 WOW64 子系统通过在基于 x64 的 Windows 版本上创建 32 位环境来执行此操作。 有关 WOW64 子系统的详细信息,请参阅 Microsoft 平台 SDK 文档的 64 位 Windows 部分中的“正在运行 32 位应用程序”主题。 若要查看本文档,请访问以下Microsoft网站: 运行 32 位应用程序

计划性能注意事项

WOW64 子系统在基于 x64 的 Windows 版本上创建 32 位环境。 某些 32 位程序在这些操作系统上运行的速度可能比 32 位版本的 Windows 运行速度要慢。 或者,需要大量内存的 32 位程序可能会在基于 x64 的 Windows 版本中表现出更高的性能。 由于基于 x64 的 Windows 版本支持比 32 位版本的 Windows 更多的物理内存,因此会出现这种性能提升。

有关 64 位和 32 位版本的 Windows 之间的内存管理差异的详细信息,请参阅 Microsoft 平台 SDK 文档的“关于内存管理”部分中的“虚拟地址空间”主题。 若要查看本文档,请访问以下Microsoft网站: 虚拟地址空间

WOW64 子系统的限制

WOW64 子系统不支持以下程序:

  • 为 16 位操作系统编译的程序
  • 为 32 位操作系统编译的内核模式程序

16 位程序

基于 x64 的 Windows 版本不支持 16 位程序或 16 位程序组件。 在基于 x64 的 Windows 版本上运行 16 位程序所需的软件仿真将显著降低这些程序的性能。

16 位安装程序通常用于安装和配置 32 位程序。 此外,一些 32 位程序需要 16 位组件才能正常运行。 尽管需要 16 位组件的 32 位程序在安装后可能会正常运行,但无法使用 16 位安装程序安装 32 位程序。 需要 16 位组件的程序无法在基于 x64 的 Windows 版本上运行。

如果需要 16 位组件的 32 位程序尝试运行 16 位文件或组件,则 32 位程序将在系统日志中记录错误消息。 然后,操作系统将允许 32 位程序处理错误。

若要确定程序是否需要 16 位组件,请安装和运行该程序。 如果程序生成错误消息,请联系程序的制造商以获取与基于 x64 的 Windows 版本兼容的更新。

32 位驱动程序

基于 x64 的 Windows 版本不支持 32 位驱动程序。 必须为基于 x64 的 Windows 版本专门编译所有硬件设备驱动程序和程序驱动程序。

如果 32 位程序尝试在运行基于 x64 版本的 Windows 的计算机上安装 32 位驱动程序,则驱动程序安装将失败。 发生此行为时,基于 x64 的 Windows 版本向 32 位程序报告错误。

如果 32 位程序尝试在运行基于 x64 的 Windows 版本的计算机上注册 32 位驱动程序以自动启动,则计算机上的启动加载程序会识别到 32 位驱动程序不受支持。 基于 x64 的 Windows 版本不会启动 32 位驱动程序,但会启动其他已注册的驱动程序。

若要确定程序是否需要 32 位驱动程序,请安装和运行该程序。 如果程序生成错误消息,请联系程序的制造商以获取与基于 x64 的 Windows 版本兼容的更新。

其他注意事项

注册表和文件重定向

WOW64 子系统通过重定向注册表调用和某些文件系统调用,将 32 位二进制文件与 64 位二进制文件隔离开来。 WOW64 子系统隔离二进制文件,以防止 32 位二进制文件意外从 64 位二进制文件访问数据。 例如,从 %systemroot%\System32 文件夹中运行.dll文件的 32 位二进制文件可能会意外地尝试访问与 32 位二进制文件不兼容的 64 位.dll文件。 为防止这种情况,WOW64 子系统将访问从 %systemroot%\System32 文件夹重定向到 %systemroot%\SysWOW64 文件夹。 此重定向会阻止兼容性错误,因为它需要专门设计.dll文件来处理 32 位程序。

有关文件系统和注册表重定向的详细信息,请参阅 Microsoft 平台 SDK 文档的 64 位 Windows 部分中的“正在运行 32 位应用程序”主题。 若要查看本文档,请访问以下Microsoft网站: 运行 32 位应用程序
WOW64 子系统重定向 32 位二进制调用,而无需更改 32 位二进制文件。 但是,在执行某些任务时,你可能会看到此重定向的证据。 例如,如果在 64 位命令提示符处键入命令行脚本,命令提示符可能无法访问 Program Files 文件夹中的 32 位程序。 WOW64 子系统在 Program Files (x86) 文件夹中重定向并安装 32 位程序。 若要访问正确的文件夹,必须更改命令行脚本。 或者,必须在 32 位命令提示符下键入命令行脚本。 32 位命令提示符会自动将文件系统调用重定向到正确的 32 位目录。

若要启动 32 位命令提示符,请执行以下步骤:

  • 单击“开始”,单击“运行,键入 %windir%\SysWoW64\cmd.exe,然后单击“确定”。

版本检查

大约 32 位程序会检查操作系统的版本信息。 执行此检查的许多 32 位程序无法将基于 x64 的 Windows 版本识别为兼容的操作系统。 发生此行为时,32 位程序将生成版本检查错误,然后关闭。 如果发生此行为,请联系 32 位程序的制造商以获取与基于 x64 的 Windows 版本兼容的更新。

The Microsoft .NET Framework

如果满足以下条件,则使用 Microsoft .NET Framework 编译的程序将在 WOW64 子系统中作为 32 位程序运行:

  • 程序在标头信息中设置了 ILONLY 位。
  • 该程序是使用 Microsoft .NET Framework 1.1 编译的。 如果程序在标头信息中未设置 ILONLY 位,或者程序是使用 Microsoft .NET Framework 版本 2.0 编译的,程序将作为本机 64 位程序运行。

OpenGL

基于 x64 的 Windows 版本不包含 OpenGL 图形驱动程序。 请联系设备的制造商以获取与基于 x64 的 Windows 版本兼容的驱动程序。

Microsoft 管理控制台 (MMC)

基于 x64 的 Windows 版本使用 64 位版本的 Microsoft 管理控制台(MMC)运行各种管理单元。但是,有时可能需要 32 位版本的 MMC 在 WOW64 子系统中运行管理单元。 有关基于 x64 版本 Windows 的 MMC 行为的详细信息,请参阅 Microsoft 平台 SDK 文档的“使用 MMC 2.0”部分中的“在 64 位 Windows 中运行 32 位和 64 位管理单元”主题。 若要查看本文档,请访问以下Microsoft网站: 在 64 位 Windows 中运行 32 位和 64 位管理单元

x64 注意事项

基于 x64 的 Windows 版本支持 32 位指令和 64 位指令。 WOW64 子系统可以通过切换处理器的本机模式,在本机 64 位模式下运行 32 位程序。 不需要单独的硬件或软件层。 在基于 x64 的 Windows 版本中运行 32 位程序时,可能无法体验到性能下降。

有关基于 x64 的处理器性能的详细信息,请联系处理器制造商或访问制造商的网站。 本文档中的信息和解决方案代表在本文发布之时 Microsoft 公司对这些问题的最新观点。 此解决方案通过 Microsoft 或第三方供应商提供。 Microsoft 并不明确建议使用本文中述及的任何第三方供应商产品或第三方解决方案。 可能还存在其他一些本文未提及的第三方提供商或第三方解决方案。 因为 Microsoft 必须响应不断变化的市场形势,所以此信息不应解释为 Microsoft 一方的承诺。 Microsoft 不担保或认可由 Microsoft 或提到的任何第三方供应商提供的任何信息或任何解决方案的准确性。

Microsoft 不作任何担保,并拒绝所有明示、暗示或法定的表述、担保和条件。 这些内容包括但不限于有关任何服务、解决方案、产品或任何其他材料或信息的陈述、担保或标题条件、不侵权、令人满意的条件、适销性和适用性。 在任何情况下,对于本文中提到的任何第三方解决方案,Microsoft 概不负责。

参考

有关 AMD64 处理器的详细信息,请访问以下高级微设备网站: AMD 网站
Microsoft 会提供第三方联系信息来帮助你查找技术支持。 此联系信息可能会更改,恕不另行通知。 Microsoft 不保证此第三方联系信息的准确性。

有关开发基于 Itanium 的 Windows Server 2003 和 Windows XP 版本的程序的详细信息,请访问以下Microsoft网站: 开发基于 64 位 Itanium 的 Windows 版本的应用程序简介

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 对于这些产品的性能或可靠性,Microsoft 不作任何暗示保证或其他形式的保证。