如何在只重新启动一次的情况下安装多个 Windows 更新程序或修复程序

概要

本文介绍了如何在只重新启动一次的情况下安装多个使用 Hotfix.exe (Microsoft Windows NT 4.0) 或 Update.exe(Microsoft Windows 2000、Microsoft Windows XP 或 Microsoft Windows Server 2003)的 Windows 产品更新(例如,关键更新、安全修补程序或修复程序)。本文所面向的读者为管理员和 IT 专业人员。您可以安装单独使用 Hotfix.exe 或 Update.exe 的 Windows 产品更新,也可以安装联合使用 Windows(带有或不带有 Service Pack)与 Hotfix.exe 或 Update.exe 的 Windows 产品更新。

注意:本文中介绍的过程对于不使用 Hotfix.exe 或 Update.exe 作为安装程序的产品更新不适用。例如,Windows NT 4.0、Windows 2000 和 Windows XP 的 Internet Explorer 更新使用基于 INF 的安装而不是 Update.exe。因此,您无法使用此过程在只重新启动一次的情况下在 Windows NT 4.0、Windows 2000 或 Windows XP 上安装多个 Microsoft Internet Explorer 更新。因为 Windows Server 2003 的 Internet Explorer 更新使用 Update.exe 作为安装程序,所以您可以使用此过程安装它们。

有关这些主题的其他信息,请访问下面的 Microsoft Web 站点:

Windows 2000
Microsoft Windows 2000 Hotfix Installation and Deployment Guide (HFDeploy.htm)(Microsoft Windows 2000 修复程序安装和部署指南)
http://www.microsoft.com/windows2000/downloads/servicepacks/sp4/HFDeploy.htm
Windows XP
Microsoft Windows XP Hotfix Installation and Deployment Guide(Microsoft Windows XP 修复程序安装和部署指南)
http://www.microsoft.com/WindowsXP/pro/downloads/servicepacks/sp1/hfdeploy.asp
Windows Server 2003 和 Windows XP 64-Bit Edition 2003 版
Guide for Installing and Deploying Updates for Microsoft Windows Server 2003 and Windows XP 64-Bit Edition Version 2003 (HFDeploy.htm)(Microsoft Windows Server 2003 和 Windows XP 64 位版本 2003 版的更新的安装和部署指南)
http://www.microsoft.com/technet/security/topics/patch/HFDeploy.asp

更多信息

Windows 产品更新(例如,关键更新、安全修补程序或修复程序)是一个可执行 (.exe) 文件,该文件包含一个或多个可应用到 Windows 以纠正特定问题的系统文件。“Microsoft 产品支持服务”会将修复程序分发到受到某个特定问题的严重影响的客户。关键更新和安全修补程序是 Microsoft 建议所有客户使用的更新。您可以从 Windows Update Web 站点、Microsoft 下载中心或其他 Microsoft Web 站点获取关键更新和安全修补程序。

2002 年 12 月以后创建的 Windows Server 2003 更新或 Windows XP 和 Windows 2000 更新

注意:要确定某个更新的创建时间,请查看更新程序包中 Update.exe 或 Hotfix.exe 安装程序的“修改日期”。

要在一台计算机上安装 Windows 产品更新,请在要更新的计算机上运行产品更新程序。要安装多个产品更新,且不在各次安装之间重新启动计算机,请使用 /z 开关。

Update.exe 程序的命令行选项

下表标识了 Update.exe 程序支持的命令行选项(或开关):
 
    以下代码示例是一个批处理文件,它可以安装多个产品更新并确保在重新启动计算机后替换为正确的文件。  
     
    
注意:所有使用 Update.exe 并且在 2001 年 5 月 18 日以后发行的 Windows Server 2003、Windows XP 和 Windows 2000 产品更新都包含 QChain.exe 功能。但是,2002 年 12 月以前发行的产品更新中存在一个问题,在某些情况下,该问题可能会在计算机上应用错误的二进制文件。2003 年 3 月,Microsoft 发行了 QChain.exe 的更新版本以解决此问题。 有关此问题或有关如何获得最新的 Qchain.exe 工具的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
815062 串联多个修复程序时正确的文件未安装

2002 年 12 月之前创建的所有 Windows NT 4.0 更新或 Windows XP 和 Windows 2000 更新

注意:要确定产品更新的创建日期,请查看更新包程序中 Update.exe 或 Hotfix.exe 安装程序的“修改日期”。

Microsoft 已经发行了一个名为 QChain.exe 的命令行工具。使用 QChain.exe,系统管理员可以将更新串联在一起。如果您将更新串联在一起,则在安装多个更新时,在各次安装之间不必重新启动计算机。如果没有此工具,则唯一受支持的方法是在安装完每个更新后都重新启动计算机。QChain.exe 工具具有以下好处:
因为在安装完各个更新之间不重新启动计算机,所以它可以增加服务器的运行时间。
使用它可以在一台计算机上更加快速地安装多个更新。
它在 Windows 2000 和 Windows NT 4.0 上都可以运行。
注意:自 2001 年 5 月 18 日以后发行的所有 Windows XP 和 Windows 2000 更新中均包含 QChain.exe 功能,但是 2002 年 12 月之前发行的更新中存在一个问题,在某些情况下,该问题可能会导致在计算机中放置错误的二进制文件。2003 年 3 月,Microsoft 发行了 QChain.exe 的更新版本以解决此问题。 有关此问题或有关如何获得最新的 Qchain.exe 工具的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
815062 串联多个修复程序时正确的文件未安装

串联更新安装时不使用 QChain.exe 是不安全的

安装更新时,如果一个文件被锁定或正在使用,则无法替换它。因此,该文件将被放置在“挂起文件重命名”队列中,并且在计算机重新启动后进行替换。在下面的情况下,会发生此问题:
安装了更新 A 和 B,但在两次安装之间没有重新启动计算机。
这两个程序包都包含文件 X。程序包 A 的文件 X 为版本 3;程序包 B 的文件 X 为版本 2。计算机中文件 X 的版本为 1。
当安装程序包 A 时,它会将它的文件 X 版本放置在“挂起文件重命名”队列中。
当安装程序包 B 时,它会将它的文件 X 版本放置在“挂起文件重命名”队列中。
重新启动计算机时,因为程序包 B 是最后安装的,所以会安装它的文件 X 的版本(在“挂起文件重命名”队列中,最后一个文件是所使用的文件)。因此,会安装版本 2,而不是按照您预期的那样安装版本 3。

如果安装了以前串联的更新而没有重新启动

虽然这种情况很少见,但是最好验证一下计算机是否具有您认为已安装的所有修复程序。要验证这一点,请使用 Qfecheck.exe 工具。 有关 Qfecheck.exe 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
282784 Qfecheck.exe 验证 Windows 2000 和 Windows XP 修复程序的安装
QChain.exe 会清理注册表中的“挂起文件重命名操作”注册表项以确保在计算机重新启动后只安装文件的最新版本。

在只重新启动一次的情况下安装多个更新

1. 使用 -z 开关运行更新安装程序,以指示安装程序在安装后不要重新启动。如果您不希望在安装期间显示提示或消息,请添加 -m 开关(表示“安静”模式)。

更新安装程序是下列程序之一:
自解压缩程序包程序文件(例如,Qnnnnnn_w2k_spx_x86_en.exe)。

- 或者 -
Hotfix.exe(如果您已经解压缩了程序包中的所有文件)。
2. 安装所有修复程序后,请运行 QChain.exe。
3. 重新启动计算机。
您还可以创建一个批处理文件来完成这一任务。下面的示例批处理文件演示了这种方法:

如何获取 QChain.exe

自 2001 年 5 月 18 日以后发行的所有 Windows XP 和 Windows 2000 更新中均包含 QChain.exe 功能,但是 2002 年 12 月之前发行的更新中存在一个问题,在某些情况下,该问题可能会导致在计算机中放置错误的二进制文件。2003 年 3 月,Microsoft 发行了 QChain.exe 的更新版本以解决此问题。 有关此问题或有关如何获得最新的 Qchain.exe 工具的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
815062 串联多个修复程序时正确的文件未安装

QChain.exe 命令语法

qchain [日志文件名]
可选的 [日志文件名] 参数使用“挂起文件重命名操作”注册表项的前后快照来创建文件。

QChain.exe 输出示例

---- Old Information In The Registry ------
Source:C:/WINNT/inf/acpi.inf
Version: 5.0.2183.1
Destination:d:/ntsust/testregchech/1394.inf
Version: 5.0.2183.1

Source:C:/WINNT/inf/adm_mult.inf
Version: 5.0.2184.1
Destination:d:/ntsust/testregchech/1394.inf
Version: 5.0.2183.1

Source:C:/WINNT/inf/banshee.inf
Version: 5.0.2080.1
Destination:d:/ntsust/testregchech/1394.inf
Version: 5.0.2183.1

---- New Information In The Registry ------
Source:C:/WINNT/inf/adm_mult.inf
Version: 5.0.2184.1
Destination:d:/ntsust/testregchech/1394.inf
Version: 5.0.2183.1

QChain.exe 的局限性

虽然 QChain 适用于大多数 Windows NT 4.0 和 Windows 2000 更新,但是 QChain.exe 可能不适用于包含以下注册表项中列出的二进制文件的更新:
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Session Manager/KnownDLLs
启动时,会将此注册表项中列出的二进制文件加载到内存中。当更新安装程序针对此列表中的二进制文件调用 GetFileVersionInfo 函数时,更新安装程序会引用已经加载的二进制文件,而不是引用实际出现在目标位置中的二进制文件。

因为启动时会将 KnownDLLs 注册表项中列出的二进制文件加载到内存中,所以在计算机重新启动前,更新安装程序必须用修复的二进制文件替换目标二进制文件。因此,在重新启动时,更新安装程序不会创建“挂起文件重命名操作”来替换该二进制文件。相反,更新会将当前的二进制文件移动到一个临时位置,将修复的二进制文件放置在当前的二进制文件曾经所处的位置,然后创建“挂起文件重命名操作”以便在计算机重新启动时删除当前的二进制文件。

QChain 只影响执行二进制文件替换操作的“挂起文件重命名操作”。它对执行删除操作的“挂起文件重命名操作”没有任何影响。

所有 Windows NT 4.0 更新和所有早于 SP2 的 Windows 2000 更新都使用 GetFileVersionInfo 来识别文件的版本。如果您安装两个或更多个 Windows NT 4.0 更新或早于 SP2 的 Windows 2000 更新,并且这些更新包含重叠的 KnownDLL,则使用 QChain 将这些更新的安装串联起来不能确保安装最新版本的修复程序。

以下情况说明了 QChain 可能无法在系统上放置正确的二进制文件的原因:
您安装了更新程序包 A 和 B,并且在两次安装之间没有重新启动。
这两个程序包都包含 Kernel32.dll,它是 KnownDLL 列表中的一个文件。程序包 A 包含 Kernel32.dll 版本 3,程序包 B 包含 Kernel32.dll 版本 2,并且计算机中已安装了 Kernel32.dll 版本 1。
在安装程序包 A 时,GetFileVersionInfo 会报告计算机中具有 Kernel32.dll 版本 1。因为程序包 A 包含版本 3,因此更新安装程序会确定需要替换文件。
更新安装程序会将计算机上的 Kernel32.dll 版本 1 移动到一个临时位置,并创建“挂起文件重命名操作”以在计算机下次重新启动时从该临时位置中删除 Kernel32.dll 文件。
程序包 A 的 Kernel32.dll 版本 3 会被复制到计算机中。
安装程序包 B 时,GetFileVersionInfo 仍然会报告计算机中安装了 Kernel32.dll 版本 1,原因是 GetFileVersionInfo 从加载到内存中的 Kernel32.dll 中读取版本信息。程序包 B 具有版本 2,因此修复程序确定需要替换文件。
更新安装程序会将现存于计算机中的 Kernel32.dll(程序包 A 的 Kernel32.dll 版本 3)移动到一个临时位置,并创建“挂起文件重命名操作”以便在计算机下次重新启动时从该临时位置删除(版本 3)Kernel32.dll。
程序包 B 的 Kernel32.dll 版本 2 会被复制到计算机中。
QChain 会运行,但是不存在用于替换文件的“挂起文件重命名操作”,因此 QChain 不执行任何操作。
因为程序包 B 是最近安装的,所以程序包 B Kernel32.dll 版本 2 位于计算机上的正确位置。因此,在计算机重新启动时,会将它加载到内存中。“挂起文件重命名操作”将同时删除原来的 Kernel32.dll 版本 1 和程序包 A 的 Kernel32.dll 版本 3。因此,计算机现在具有 Kernel32.dll 版本 2 而不是版本 3。
有一个 Windows 2000 的后 SP2 修复程序,在该修复程序中,不再对加载到内存中的 KnownDLL 使用 GetFileVersionInfo。相反,更新安装程序会映射实际出现在目标位置的文件,然后针对所映射的文件调用 GetFileVersionInfo。因此,您可以使用 QChain.exe 将 Windows 2000 的后 SP2 更新串联在一起。执行此操作时,会安装最新版本的文件,而无需考虑所有更新的安装顺序。

如果您重新演示前面的情况,并使用 Windows 2000 的后 SP2 更新,则程序包 B 中的修复程序会映射程序包 A 的 Kernel32.dll 并识别版本 3(该版本高于程序包 B 自己的 Kernel32.dll 版本 2)。因此,程序包 B 不会替换系统中的 Kernel32.dll,并且程序包 A 的 Kernel32.dll 版本 3 是计算机在重新启动后正确使用的版本。
这篇文章中的信息适用于:
Microsoft Windows Server 2003 Datacenter Edition
Microsoft Windows Server 2003 64-bit Enterprise Edition
Microsoft Windows Server 2003 Datacenter Edition
Microsoft Windows Server 2003 Enterprise Edition
Microsoft Windows Server 2003 Standard Edition
Microsoft Windows Server 2003 Web Edition
Microsoft Windows XP 64-Bit Edition
Microsoft Windows XP 64-Bit Edition
Microsoft Windows XP Home Edition
Microsoft Windows XP Professional Edition
Microsoft Windows XP Media Center Edition
Microsoft Windows XP Tablet PC Edition
Microsoft Windows 2000 Advanced Server
Microsoft Windows 2000 Datacenter Server
Microsoft Windows 2000 Professional Edition
Microsoft Windows 2000 Server
Microsoft Windows NT Server 4.0 Standard Edition
Microsoft Windows NT Server 4.0 企业版
Microsoft Windows NT Server 4.0 Terminal Server(终端服务器)
Microsoft Windows NT Workstation 4.0 开发员版

你可能感兴趣的:(如何在只重新启动一次的情况下安装多个 Windows 更新程序或修复程序)