Arm 上的程序兼容性疑难解答

由 Arm 提供支持的电脑还提供出色的应用程序兼容性,支持运行未经修改的现有 x86 win32 应用程序。 Arm 应用可无需任何仿真以本机方式运行,而 x86 和 x64 应用则通过仿真在 Arm 设备上运行。

但是,仿真有时会执行无法带来最佳用户体验的优化。 可使用程序兼容性疑难解答来切换 x86 或 x64 应用的仿真设置,从而减少默认优化且有可能改善兼容性。

启动程序兼容性疑难解答

以在任何 Windows 电脑上相同的方式手动启动程序兼容性疑难解答:右键单击可执行 (.exe) 文件,然后选择“疑难解答兼容性”。 然后,可选择试用推荐设置以采用推荐兼容性设置来测试运行该程序;或者,也可选择故障排除程序,以便根据注意到的特定问题来选择兼容性设置。

Screenshot of the Troubleshoot compatibility options.

如果选择故障排除程序,则可选择:

  • 该程序运行于早期版本的 Windows 中,但不会立即安装或运行
  • 程序会打开,但无法正确显示
  • 程序需要其他权限
  • 我未看到列出我的问题

Screenshot of the What problems do you notice options.

所有选项都启用适用并可在 Windows 台式电脑上应用的设置。 此外,第一、第二和第四个选项会应用 Disable application cacheDisable hybrid execution mode 仿真设置。 (有关说明,请参阅下方的仿真设置表。)

切换仿真设置

警告

更改仿真设置可能会导致应用程序意外崩溃或根本不启动。

可通过右键单击此可执行文件并选择属性来切换仿真设置。

在 ARM 上,标题为 ARM 上的 Windows 10ARM 上的 Windows 11 的部分将在兼容性选项卡中提供。选择更改仿真设置可启动“仿真属性”窗口。

Change emulation settings screenshot

此“仿真属性”窗口提供了两种方法来修改仿真设置。 可选择预定义的仿真设置组,或是选择使用高级设置选项来启用对单个设置的选择。

以下仿真设置可减少性能优化从而改善质量,并可用于在 Arm 上运行 Windows 时尝试测试 x86 或 x64 应用的兼容性。

Change emulation settings screenshot2

选择使用高级设置,以便选择下表所述的各个设置。

仿真设置 Result
禁用应用程序缓存 操作系统会缓存已编译的代码块,从而减少后续执行的仿真开销。 此设置要求模拟器在运行时重新编译所有应用代码。
禁用混合执行模式 已编译的混合可移植可执行文件 (CHPE);其二进制文件为与 x86 兼容的二进制文件,其中包括用于提高性能的本机 Arm64 代码,但它可能与某些应用不兼容。 此设置会强制使用仅限 x86 的二进制文件。
其他轻型仿真保护 一个会影响可变元数据等内容的全部捕获更新,而在模拟中运行 x86 或 x64 应用时这些内容可能会影响性能。
严格的自修改代码支持 启用此功能可确保在仿真中正确支持所有自修改代码。 默认模拟器行为涵盖了最常见的自修改代码场景。 启用该选项会显著降低执行期间自修改代码的性能。
禁用 RWX 页面性能优化 此优化可提高针对可读、可写和可执行 (RWX) 页面的代码性能,但可能会与某些应用不兼容。
禁用 JIT 优化(仅限 x64 应用) 此功能已不再使用,且会从未来版本的疑难解答中删除。
禁用浮点优化(仅限 x64 应用) 选中可按完全 80 位精度模拟 x87 浮点,但性能成本较高。 x87 是一种浮点协处理器,它会在某些早期的 x86 处理器中使用比 32 位或 64 位格式更高的 80 位浮点格式来执行浮点算术。

此外,还可更改应用程序使用多个 CPU 核心的方式,在“快速”、“严格多核操作”、“非常严格”或“强制执行单核操作”之间进行选择。 如果发现兼容性问题,则请在采用这些设置的 Arm 上运行 Windows 时测试应用仿真。

Multi-core settings screenshot

这些设置可更改在模拟期间用于在应用中各核心之间同步内存访问的内存屏障数。 快速为默认模式,但严格非常严格选项可增大屏障数。 此特性会降低应用速度,但可减小应用错误的风险。 单核选项可消除所有屏障,但会强制所有应用线程在单个核心上运行。

如果更改特定设置可解决问题,则请通过向 woafeedback@microsoft.com 发送电子邮件并附带详细信息,以便我们采纳你的反馈。