运行 16 位应用程序的小型软件

运行 16 位应用程序的小型软件

我无法在 64 位系统上运行小型 Windows 16 位应用程序。我在网上找到的建议是在虚拟机内运行 16 位应用程序,但运行整个操作系统只是为了运行一个小应用程序似乎有点过头了。

我认为可以制作一个小软件来模拟 16 位应用程序所需的必要内容。有人知道这样的解决方案吗?

答案1

我认为可以制作一个小软件来模拟 16 位应用程序所需的必要内容。有人知道这样的解决方案吗?

实际上,这并不简单。amd64 模式下的 x86 CPU 不仅获得了很多功能(双寄存器、双 MMX 寄存器、64 位地址模式等),而且还失去了对一些旧选项的访问权限。它可以毫无问题地运行 32 位应用程序,但不再有办法以本机方式运行 16 位应用程序。因此,您确实需要模拟较旧的 CPU。模拟相对较慢,而且并非完全简单。

通常的解决方案是将整个东西放入虚拟机中,例如由 qEMu 驱动的可以模拟其他 CPU 的虚拟机。

我在网上找到的建议是在虚拟机中运行 16 位应用程序,但为了运行一个小应用程序而运行整个操作系统似乎有点小题大做。

这有点矫枉过正。正确的解决方案是重新编译应用程序并将其作为 64 位可执行文件运行(如果应用程序编写得当并使用了 size_t 之类的东西,而不是仅仅假设事情永远不会改变,那么这通常很简单)。这确实需要您能够访问源代码,但情况并非总是如此。

解决方法如下:

  • 保留旧的 DOS/windows 2/3/3.11 系统(请 Gd
  • 在虚拟机内运行它。
  • 通过以下方式模拟旧机器葡萄酒

不推荐使用第一种解决方案。您将只能使用旧操作系统,例如 Windows 7 32 位(不要使用不再有更新的旧操作系统。除非您想在之前切换操作系统,否则不要使用 XP2014 年 4 月8或者使用没有网络访问的专用主机,所有 USB 端口都粘住等等。这显然会损害可用性。

在虚拟机中运行它很棒。它可以工作,可以隔离。它很容易备份,您可以在需要时将虚拟机迁移到新机器。面向未来是一件好事。
明显的缺点是运行虚拟机,但其中一部分可以自动化(例如,当您打开桌面时自动启动它。将虚拟机的关闭与 Windows 关机等联系起来。

模拟也可以工作,但通常会比较慢。(大多数模拟速度更快的例外情况是 WINE、Linux 和游戏,其中 OpenGL 调用在 Linux 中要快得多,导致某些游戏的速度意外提高 40%)。不过,速度慢并不坏,因为旧应用程序可能运行在 16 MHz 左右的 286(16 位时代)上,而现在运行在多千兆赫的现代核心上。即使速度慢了 99%,它仍然会更快。

不过,为了便于维护和将来的验证:获取一个带有 win7-32​​ 位的 VM 并在其中运行您的应用程序。

答案2

对我来说,otvdm 是我一直在寻找的 Ntvdm 的非官方替代品。而 16 位 Windows 使用保护模式,因此根本不需要实模式访问,这与 Microsoft 声称的不一样(要求是 16 位段访问)。
它完全像 Ntᴠᴅᴍ 一样模拟 ᴄᴘᴜ,或者通过英特尔黑客攻击为了获得更好的性能,但它这样做只是为了像 Wine 在 Linux 上所做的那样包装系统调用:没有虚拟网卡;没有虚拟硬盘(%systemdrive%%systemdrive%);没有分配但未使用的内存;还有我正在寻找的选项,但默认情况下是禁用的:对注册表进行的更改是针对系统进行的!

它甚至比官方的 Ntᴠᴅᴍ 更强大:硬件访问的透明级别如此之高,以至于应该能够充分利用原始图形硬件的全部处理能力。虽然当时没有 ᴀᴘɪ 可以做到这一点……

与 Ntᴠᴅᴍ 一样,当遇到 16 位程序时,它会透明且自动地启动。

可以下载预编译版本这里

相关内容