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