Issues running MS-DOS/16-bit Windows applications under Windows 2000/XP
Migrated Windows 9x Settings
Windows 9x systems upgraded to Windows 2000/XP or above may exhibit strange behaviour when running 16-bit MS-DOS applications. This is because settings from CONFIG.SYS and AUTOEXEC.BAT are migrated to CONFIG.NT and AUTOEXEC.NT and those settings almost certainly are no longer relevant.
Windows NT/2000 and above do not parse the contents of C:\CONFIG.SYS and C:\AUTOEXEC.BAT (except some environment variables). Instead, %SystemRoot%\System32\CONFIG.NT and %SystemRoot%\System32\AUTOEXEC.NT are used to customise the Virtual DOS Machine (VDM) environment. However, the default settings are usually suitable and do not need to be enhanced with older commands suited for Windows 9x.
Remove the old, unused commands from CONFIG.NT and AUTOEXEC.NT. It is not necessary to reboot because CONFIG.NT and AUTOEXEC.NT are parsed each time a new Virtual DOS Machine is launched.
Large Environment Tables
MS-DOS introduced the environment table, an area in memory where values can be stored to be used by programs. This enabled different settings to be used in different scripts or on different machines to customise the behviour of a program. To set an environment variable, you would type a command similar to:
The environment table occupied a fixed portion of memory that needed to be manually expanded if you had a large number of environment variables. The environment table functionality was carried forward into Windows 9x and Windows NT/2000 and beyond. However, in the case of Windows NT and above, the environment table automatically expands to accomodate the variables assigned. Windows NT and above also define a very large number of predefined environment variables.
Normally the number of variables in the environment table is not an issue because values are only fetched when required and not stored. However, some MS-DOS and 16-bit Windows programs preload the environment table and therefore fail because it is too large. In this case it is possible to customise the environment for that program to clear all unused variables before launching the program, thereby decreasing the size of the environment table. (NB. In Windows NT and above, each process has its own environment table; inherited from the spawning process. Therefore it is possible to modify the environment table radically for a single application without ill-effect.)
The most convenient way to handle this is to put the program in a script with the commands to shrink the environment table and then make a shortcut to the script. For example: