我有一个旧的 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 位软件。
编辑:这是我用来解决问题的步骤
- 从 http://www.conradshome.com/win31/archive/ 下载 winfloat.exe
- 用 7zip 打开 winfloat.exe。找到 HIDE87.com 并将其解压缩到桌面。
- 将HIDE87.com复制到C:\Windows\System32\
- 用记事本打开c:\windows\system32\autoexec.nt
- 在文件顶部,在第一组评论之后添加以下内容
lh %SystemRoot%\system32\HIDE87.com
- 在最后一行上方添加评论
REM Fix for Gen. Protection Fault in win87em.dll
- 保存对 autoexec.nt 的更改并重新启动电脑。
关于windows - 旧的 16 位应用程序间歇性地导致 WIN87EM.DLL 中的 GPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10511506/