User Tip #35: Running 16-bit programs in separate memory space

Hits: Failed to execute CGI : Win32 Error Code = 3


Older applications which attempt to directly access the hardware will not work under NT. There is not way to know whether it will or will not work except by trying it or using the manufacturer's documentation. Although they are current, high-performance games in particular tend to fail because they must access screen oriented hardware directly to get the performance required.

NT has three memory spaces. DOS programs are run in the DOS memory space. 32-bit windows programs are run in the win32 memory space. Old win3.x 16-bit programs are run in a memory space for win3.x programs. These spaces do not overlap. Anything running in one can not interfere or lock up the programs running in the other memory spaces. It mostly works very very well.

Win3.x programs use cooperative multitasking. This means that one of these programs would run as long as it wanted and then it would let another program have the CPU ever-so-often. When these programs were well-behaved, all was OK. Unfortunately, one bad apple would upset the entire apple cart and your PC is LOCKED. NT will not let these old dogs lock your PC, but they can still interfere with each other (god forbid you are still running multiple of these old dogs). Set the program's properties to run in a separate memory space. When you click this option, NT will load each of these old dogs in its own space so they will not interfere with each other should they crash. Also this prevents one of them from hogging all the CPU allocated to the 16-bit applications.

To make this the default, cut and paste the following script into vdm.reg and run it.

REGEDIT4
BLANK LINE GOES HERE
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WOW]
"DefaultSeparateVDM"="yes"

BLANK LINE GOES HERE

See .REG files for background information on .REG files.

There is a command line option to start 16-bit applications in separate memory space:

At the command prompt simply type: start /separate c:\pathtoapp\application.exe

You can also launch the program in a separate memory space at the Run command by entering the name of the application and enabling the Run In Separate Memory Space check box. If that check box is grayed out, it's not a 16-bit app.