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

时间:2010-11-29 11:31:35

标签: windows 64-bit wow64

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

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

有什么方法可以修改这些程序的EXE,使其在Win 7 x64上运行。这些程序的根本区别在于它与其他透明运行的程序有什么不同。

2 个答案:

答案 0 :(得分:6)

它们实际上是8位或16位程序。 Windows x64在长模式下运行,该模式不支持此类程序所需的Virtual 8086模式。没有办法让它们无法从源代码重新编译它们或在虚拟机中运行它们。

答案 1 :(得分:0)

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

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