本文描述如何在 Windows 中对基于 MS-DOS 的程序进行故障排除。
测试 Ntvdm 子系统
在基于 MS-DOS 的程序出现问题时,首先要测试的是 Windows 虚拟 DOS 机 (NTVDM) 子系统。可以使用 Command.com 实用工具测试 NTVDM 子系统是否正常运行。要启动 Command.com,请按照下列步骤操作:
- 单击开始按钮,然后单击运行。
- 在打开框中,键入 command.com,然后单击确定。
随即启动一个命令提示符窗口。如果这没有正常运行,则说明 NTVDM 子系统存在问题,应当检查下列各项:
- 检查 SystemRoot%\System32 文件夹中的 Config.nt 和 Autoexec.nt 文件,查看是否有非标准设置。
使用 REM 语句注释掉除下列默认条目以外的所有条目:
Config.nt
---------
dos=high, umb
device=%SystemRoot%\System32\Himem.sys
files=20
Autoexec.nt
-----------
lh %SystemRoot%\System32\Mscdexnt.exe
lh %SystemRoot%\System32\Redir
lh %SystemRoot%\System32\Dosx
lh %SystemRoot%\System32\Nw16(仅当安装了 CSNW 时)
lh %SystemRoot%\System32\Vwipxspx(仅当安装了 CSNW 时)
另一种实现方法是将 Autoexec.nt_ 和 Config.nt_ 从 Windows 光盘展开到 %SystemRoot%\System32 文件夹中。 - 按 Ctrl+Shift+Esc 启动任务管理器,关闭所有正在运行的程序,并确保没有其他 NTVDM 进程正在运行。
- 禁止任何程序在启动时运行。启动时,程序可以从以下两个位置运行:“启动”组,以及注册表中的 Run 和 RunOnce 行。可以按照下列步骤检查这些位置:
- “启动”组是本地硬盘上的文件夹。它们的位置是:
- %SystemRoot%\Profiles\user_name\“开始”菜单\程序
- %SystemRoot%\Profiles\Default user\“开始”菜单\程序
- Run 和 RunOnce 行位于注册表中的以下注册表项下:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\
- 检查 %SystemRoot%\System32 文件夹中的 NTVDM 系统文件。检查下列文件,并通过检查大小和日期确保它们的版本是正确的:
Ntio.sys
Ntdos.sys
Ntvdm.exe
Ntvdm.dll(仅限于 Windows NT 3.1)
Redir.exe
- 与 NTVDM 子系统相关联的注册表项有:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
此项存储 Config.sys 和 Autoexec.bat 文件中的环境变量,以供在 Windows 中使用。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ VirtualDeviceDrivers
此项存储 NTVDM 会话中使用的设备驱动程序。Windows 安装程序会在安装设备驱动程序时创建这些项。
检查程序特定的问题
下列功能在 Windows XP 中无法使用:
- 支持除任务切换 API(应用程序编程接口)函数以外的所有 MS-DOS 函数。
- 不支持块模式设备驱动程序。不支持块设备,因此不支持处理块设备和 SETDPB 函数的 MS-DOS I/O 控制 (IOCTL) API。
- 中断 10 函数 1A 返回 0;所有其他函数都被传递到只读内存 (ROM)。
- 不支持处理禁用磁盘访问的中断 13 调用。
- 中断 18 (ROM BASIC) 生成一条说明不支持 ROM BASIC 的消息。
- 中断 19 不重新启动计算机,但是会干净地关闭当前的虚拟 DOS 机 (VDM)。
- 不支持处理 DOSKEY 程序呼出 (AX = 4800) 的中断 2F。
- 不支持 Microsoft CD-ROM 扩展 (MSCDEX) 函数 2、3、4、5、8、E 和 F。
- x86 计算机上的 16 位 Windows 子系统支持增强模式的程序;但是,它不支持 16 位的虚拟设备驱动程序 (VxD)。非 x86 的计算机上的子系统模拟了 Intel 40486 指令集,这使得计算机能够在精简指令集计算机 (RISC) 上运行增强模式的程序,如 Microsoft Visual Basic。
这意味着 Windows 不支持需要无限制地访问硬件的 16 位程序。如果您的程序要求这一点,则该程序将无法在 Windows NT、Windows 2000 或 Windows XP 中正常运行。
下一步,应当检查 Autoexec.nt 和 Config.nt 文件设置是否正确。请始终尝试使用上文中列出的默认设置。某些程序要求有特殊的设置或驱动程序才能在 Config.sys 或 Autoexec.bat 文件中运行。这种情况下,有两种用于在启动程序时初始化这些文件的方法:
- 在 %SystemRoot%\System32 文件夹的 Config.nt 和 Autoexec.nt 文件中输入这些行。
- 创建在启动该程序时运行的新的 Config 和 Autoexec 文件。为此,请按照下列步骤操作:
- 创建这些文件,并在除 %SystemRoot%\System32 以外的文件夹中使用 .nt 扩展名保存它们(通常将这些文件保存在与该程序相同的文件夹中)。
- 右键单击桌面,指向新建,然后单击快捷方式。
- 在“请键入项目的位置”框中,键入您要运行的文件的完整路径,然后单击下一步。
- 在“键入该快捷方式的名称”框中,键入快捷方式的名称,然后单击完成。这会在桌面上创建一个新的快捷方式。
- 右键单击该新快捷方式,然后单击属性。
- 在程序选项卡上,单击 Windows 打开对话框,以便输入 Autoexec 和 Config 文件的路径。
- 键入所创建的文件的完整路径,然后在这两个对话框中单击确定。
单击此图标以运行为该程序指定的 Autoexec 和 Config 文件。这些设置要遵循与为基于 MS-DOS 的程序所列出的限制相同的限制。
程序的属性中还有其他设置。如果您的程序无法正常运行,请检查所有选项卡并确保程序设置符合制造商的规范。如果该程序仍无法正常运行,请与该程序的供应商联系,以确保 Windows 支持该程序。
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
171940?
(http://support.microsoft.com/kb/171940/
)
MS-DOS 应用程序 I/O 操作导致软盘驱动器访问
156687?
(http://support.microsoft.com/kb/156687/
)
CONFIG.NT 或 AUTOEXEC.NT 中的项可能导致 NTVDM 错误
102418?
(http://support.microsoft.com/kb/102418/
)
NTVDM 错误:驱动器中没有磁盘
142026?
(http://support.microsoft.com/kb/142026/
)
Err:运行 16 位或 DOS 应用程序时出现“Hidden console of WOW VDM”(WOW VDM 控制台隐藏)
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。对于这些产品的性能或可靠性,Microsoft 不作任何暗示保证或其他形式的保证。