windows - 旧的 16 位应用程序间歇性地导致 WIN87EM.DLL 中的 GPF

标签 windows virtualbox 16-bit

我有一个旧的 16 位应用程序,它是为 Windows 3.1 开发的。它执行一些计算并且是更复杂系统的一部分。系统为程序设置输入,并收集输出结果。

不幸的是,16 位程序在此期间仍然存在,因此我们必须解决它在现代操作系统上造成的问题。

系统运行在 Windows XP 上,在 Windows XP 物理机上运行正常。我遇到问题的机器是在 Debian 机器上的 VirtualBox(版本 4.1.12)上运行的 Windows XP 实例。物理计算机是 HP Proliant 服务器,具有四核至强 3.4 Ghz。我正在使用远程桌面从我的 Windows 7 机器访问计算机。

我得到的错误是,“程序在地址为 0001:02C9 的 WIN87EM.DLL 中导致一般保护错误”。令人恼火的是,有时它可以工作,有时却不能,这使得故障排除变得更加令人沮丧。

在网上搜索时,我发现有几个网站提到了同样的问题。他们似乎都没有提供真正的解决方案,只是说 WIN87EM.DLL 提供浮点例程,并且在某些打印机上存在一些问题。

我已经卸载了虚拟机上的所有打印机,我还尝试安装 PDF writer 并将其设置为默认打印机 - 这样机器上就有了打印机。我已禁用与我的远程桌面连接的资源共享。我已经更新了机器上的虚拟机 guest 驱动程序。我还尝试在可执行文件的属性中设置与 Windows 95 的兼容性。

有任何解决此问题的指示,或者我可以尝试使其正常工作的方法吗?

最佳答案

这个问题很老,但我确实遇到了 win87em.dll 崩溃,一些 16 位工厂自动化软件在 Windows 7 上 native 运行。按照 HIDE87.com 的方法并编辑 autoexec.nt我能够使软件停止崩溃,以便我可以进行编辑。

这台机器运行的是 Intel 8 系列/C220 系列芯片。我将此配置归因于崩溃,因为我多年来一直在大量其他 Windows 7 机器上使用相同的 16 位软件。

编辑:这是我用来解决问题的步骤

  1. http://www.conradshome.com/win31/archive/ 下载 winfloat.exe
  2. 用 7zip 打开 winfloat.exe。找到 HIDE87.com 并将其解压缩到桌面。
  3. 将HIDE87.com复制到C:\Windows\System32\
  4. 用记事本打开c:\windows\system32\autoexec.nt
  5. 在文件顶部,在第一组评论之后添加以下内容

lh %SystemRoot%\system32\HIDE87.com

  1. 在最后一行上方添加评论

REM Fix for Gen. Protection Fault in win87em.dll

  1. 保存对 autoexec.nt 的更改并重新启动电脑。

关于windows - 旧的 16 位应用程序间歇性地导致 WIN87EM.DLL 中的 GPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10511506/

相关文章:

c - sprintf 段错误而 printf 正常

windows - 在超时命令中跳过按 CTRL+C

ubuntu - 使用 xsel 或 xclip 从 Linux 客户机复制虚拟机到非 Linux 主机

assembly - 与 CMPSB 指令混淆

c# - 通过 Tao/C# 的 OpenGl 16 位显示

c# - 比较 Ink 序列化格式的签名

windows - cygwin 终端颜色在 sshing 时褪色

virtual-machine - VBox管理 : error: Failed to create the host-only adapter

macos - Virtualbox 返回 errorID=BLKCACHE_IOERR

python - 防止 16 位图像数据的自动缩放