我有一个旧的专有自定义安装程序,Windows 无法将其转换为 32 位安装程序(安装的 32 位程序需要强大的 ɢᴘᴜ 处理能力才能正确运行,因此无法进行完全模拟)。因此,需要像运行任何 Win16 位应用程序一样运行安装程序……
我完全清楚微软的官方答案是you can’t
但是非官方的答案是 Wine 在 64 位 Linux 上运行安装程序没有问题(但是 Direct3d 到 OpenGl 的转换会影响已安装的 32 位程序的性能)(讽刺的是 Linux 运行 Windows 程序比 Microsoft 更好)。
原因是 Windows 16 位不需要 vm86 模式,但只有通过局部描述符表。事实上微软似乎没有理由努力改变他们的做事方式。
那么,无需使用 Wine 来运行已安装的程序,执行此操作的非正式方法是什么?
答案1
otvdm 是我一直在寻找的 Ntvdm 的非官方替代品。而 16 位 Windows 使用保护模式,因此根本不需要实模式访问,这与 Microsoft 声称的不一样(要求是 16 位段访问)。
它完全像 Ntᴠᴅᴍ 一样模拟 ᴄᴘᴜ,或者通过英特尔黑客攻击为了获得更好的性能,但它这样做只是为了像 Wine 在 Linux 上所做的那样包装系统调用:没有虚拟网卡;没有虚拟硬盘(%systemdrive%
是%systemdrive%
);没有分配但未使用的内存;还有我正在寻找的选项,但默认情况下是禁用的:对注册表进行的更改是针对系统进行的!
它甚至比官方的 Ntᴠᴅᴍ 更强大:硬件访问的透明级别如此之高,以至于应该能够充分利用原始图形硬件的全部处理能力。虽然当时没有 ᴀᴘɪ 可以做到这一点……
和 Ntᴠᴅᴍ 一样,当遇到 16 位程序时,它会透明地自动启动。
唯一的缺点是 Windows 3.11 用户空间(如程序管理器)不包含在该版本中(甚至没有它的开源克隆),而现代 Windows 32 位 Windows 10 也包含它。但由于它与 exe 有关,因此应该可以从 32 位 Windows 中复制以获取它们。
可以下载预编译版本这里。