代码之家  ›  专栏  ›  技术社区  ›  Madhur Ahuja

为什么有些为x86编译的程序不在x64下运行,而有些则在x64下运行?

  •  5
  • Madhur Ahuja  · 技术社区  · 14 年前

    我已经看到一些由我编写并使用ml.exe为x86组装的程序在我的win 7 x64上运行良好。我相信这是因为哇技术。

    但是,有些程序(不是我写的)不运行。他们给出的错误是: 此文件的版本与正在运行的Windows版本不兼容。检查计算机系统信息,查看是否需要该程序的x86(32位)或x64(64位)版本,然后与软件发行商联系。

    我是否可以修改这些程序的exe以使其在win 7 x64上运行?这些程序与其他透明运行的程序的根本区别是什么?

    2 回复  |  直到 12 年前
        1
  •  6
  •   Ignacio Vazquez-Abrams    14 年前

    它们实际上是8位或16位程序。Windows X64以长模式运行,不支持此类程序所需的虚拟8086模式。如果不从源代码重新编译它们或在虚拟机中运行它们,就无法使它们正常工作。

        2
  •  0
  •   Tomas Kubes    12 年前

    原因之一可能是.NET和本机库的组合。.NET库在运行时编译为x64(如果未显式指定x86),而本机库在x86模式下运行。它不能同时运行。

    另一个原因是访问注册表。根据使用的API,wow64模式下的x86app可以转发到注册表的另一部分。如果注册表访问API不一致,可能会造成问题。