在安装了早期版本的Windows操作系统以形成双引导配置后,Windows Vista无法再启动

症状
在基于 Microsoft Windows Vista 的计算机上安装了早期版本的 Windows 操作系统以形成双引导配置后,可能会遇到下列问题之一:• 如果在基于 Windows Vista 的计算机上安装早期版本的 Windows 操作系统,Windows Vista 再也无法启动。在这种情况下,只有早期版本的 Windows 操作系统可以启动。
• 如果在已安装了 Windows xp 和 Windows Vista 形成双引导配置的计算机上安装 Microsoft Windows XP 的其他实例,可能会收到以下错误消息:
Disk read error has occurred.


原因
之所以会出现这些问题,是因为早期版本的 Windows 操作系统与新的 Windows Vista 启动方法不兼容。Windows Vista 使用新的启动配置数据库 (BCD) 存储。此存储包含一个启动菜单以及有关计算机上已安装的操作系统的所有信息。因此,不能使用来自早期版本的 Windows 操作系统的 Boot.ini 文件来启动 Windows Vista。

在基于基本输入/输出系统 (BIOS) 的计算机上运行的早期版本的 Windows 操作系统(如 Windows XP)中,启动过程与系统 BIOS 一起启动。BIOS 确定启动设备,然后加载第一个物理扇区。此物理扇区称为主启动记录 (MBR)。MBR 包含分区表和必要的启动执行代码。此代码搜索分区表,以查找活动分区并将控制传递给活动分区上的启动扇区。然后,活动分区上的启动扇区将加载 Ntldr 程序。Ntldr 程序会分析 Boot.ini 文件。此文件用来枚举已安装的操作系统。

当 Windows Vista 在基于 BIOS 的计算机上启动时,BIOS 将加载 MBR 然后加载启动扇区。但是,启动代码将加载新的 Windows 启动管理器程序 (Bootmgr)。Windows 启动管理器程序会分析启动配置数据文件,枚举已安装的操作系统,然后显示启动菜单。如果在含有 Windows Vista 的双引导配置中安装了早期版本的 Windows 操作系统,Windows 启动管理器程序就会将控制权转给早期版本的 Windows 操作系统的 Ntldr 程序。当您从启动菜单中选择“Windows Vista”时,Windows 启动管理器程序将执行上述操作。

在基于 Windows Vista 的计算机上安装早期版本的 Windows 操作系统时,安装程序将覆盖 MBR、启动扇区和启动文件中的所有内容。因此,早期版本的 Windows 操作系统失去了与 Windows Vista 的向前兼容性。

解决方案
要解决这些问题,请按照下列步骤操作。

注意:可通过使用命令提示符来运行以下过程中的命令。如果在 Windows Vista 中运行这些命令,请在已提升用户权限的命令提示符中运行它们。为此,请单击“开始”,单击“附件”,右键单击命令提示符快捷方式,然后单击“以管理员身份运行”。1. 使用 Bootsect.exe 还原 Windows Vista MBR 以及将控制权转给 Windows 启动管理器程序的启动代码。为此,请在命令提示符处键入以下命令:Drive:\boot\Bootsect.exe /NT60 All

在此命令中,Drive 是 Windows Vista 安装介质所在的驱动器。

注意:此步骤的 boot 文件夹位于 DVD 驱动器上。
2. 使用 Bcdedit.exe 在 BCD Boot.ini 文件中为早期版本的 Windows 操作系统手动创建一个条目。为此,请在命令提示符处键入下列命令。

注意:在这些命令中,Drive 是安装 Windows Vista 的驱动器。• Drive:\Windows\system32\Bcdedit /create {ntldr} /d "<对早期 Windows 版本的描述>"

注意:在此命令中,<对早期 Windows 版本的描述> 可以是所需的任何文本。例如,<对早期 Windows 版本的描述> 可以是“Windows XP”或“Windows Server 2003”。
• Drive:\Windows\system32\Bcdedit /set {ntldr} device partition=x:

注意:在此命令中,x: 是活动分区的驱动器号。
• Drive:\Windows\system32\Bcdedit /set {ntldr} path \ntldr
• Drive:\Windows\system32\Bcdedit /displayorder {ntldr} /addlast
 
3. 重新启动计算机。