Recently ran into an issue with a Windows 7 32-bit VM running in VMware Fusion on Mac OSX 10.9 (Mavericks) when running a Point of Sale application would receive a Application has caused a general protection fault in module WIN87EM.DLL. Starting doing some digging and found this thread discussing the issue at http://social.technet.microsoft.com/Forums/en-US/e0922437-0dc7-4091-a8f7-fadc7fb5bbb5/general-protection-fault-in-module-win87emdll-while-running-windows-xp-mode?forum=w7itprovirt.
Basically the issue is that when you try to run a legacy 16-bit application in Windows XP and above you will receive the GPF (General Protection Fault).
The Windows 80×87 emulator library, WIN87EM.DLL, works at the 16-bit-Windows level to virtualize the coprocessor among multiple Windows-based applications that run inside the system VM.
It appears to me that, with the Virtual Machine using a Virtualized Processor (not related to the above reference to “virtualized coprocessor”) as opposed to an emulated processor, the Virtual Math Coprocessor Device (VMCPD) and/or WIN87EM.DLL generate an error from the virtualized processor.
So how do we fix it. Simple enough you just have to to “hiding” the math coprocessor from the Virtual Machine, so it doesn’t go to the processor. This apparently can be achieved by using a program called WinFloat which includes a tool called HIDE87, which is suppose to hide the math coprocessor from the kernel.
Lucky for us you can download winfloat from http://www.conradshome.com/win31/archive/.
- Click on winfloat.exe to download to a directory. Once downloaded double-click to extract the files.
- Copy HIDE87.com to c:\windows\system32 directory
- Add lh c:\windows\system32\HIDE87.com as the first line to the c:\windows\system32\autoexec.nt file.
- Reboot virtual machine
The error should now be gone. This will work with virtual machines running on Virtualbox and VMWare.