本页
概要
本文介绍了如何在只重新启动一次的情况下安装多个使用 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 作为安装程序,所以您可以使用此过程安装它们。
注意:本文中介绍的过程对于不使用 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 作为安装程序,所以您可以使用此过程安装它们。
Windows 产品更新(例如,关键更新、安全修补程序或修复程序)是一个可执行 (.exe) 文件,该文件包含一个或多个可应用到 Windows 以纠正特定问题的系统文件。“Microsoft 产品支持服务”会将修复程序分发到受到某个特定问题的严重影响的客户。关键更新和安全修补程序是 Microsoft 建议所有客户使用的更新。您可以从 Windows Update 网站、Microsoft 下载中心或其他 Microsoft 网站获取关键更新和安全修补程序。
Windows XP x64 Edition 更新和 Windows Server 2003 更新或 2002 年 12 月之后创建的 Windows XP 和 Windows 2000 更新
注意:要确定某个更新的创建时间,请查看更新程序包中 Update.exe 或 Hotfix.exe 安装程序的“修改日期”。要在一台计算机上安装 Windows 产品更新,请在要更新的计算机上运行产品更新程序。要安装多个产品更新而在每次安装之间不重新启动计算机,请使用 /z 开关。
Update.exe 程序的命令行选项
下表标识了 Update.exe 程序支持的命令行选项(或开关):开关说明 ------ ----------- /f 强制其他应用程序在关机时关闭。/n 在删除修复程序之前不备份文件。
/z 安装完成后不重新启动计算机。/q 使用“安静”模式,无需用户交互。
/m 使用“无人参与”安装模式 (Windows 2000)。/u 使用“无人参与”安装模式 (Windows XP)。
/l 列出已安装的修复程序。以下代码示例是一个批处理文件,它可以安装多个产品更新并确保在重新启动计算机后替换为正确的文件。
@echo off
setlocal
set PATHTOFIXES=E:\hotfix
%PATHTOFIXES%\Q123456_w2k_sp4_x86.exe /Z /M
%PATHTOFIXES%\Q123321_w2k_sp4_x86.exe /Z /M
%PATHTOFIXES%\Q123789_w2k_sp4_x86.exe /Z /M
注意:所有使用 Update.exe 并且在 2001 年 5 月 18 日以后发布的 Windows XP x64 Editions、Windows Server 2003、Windows XP 和 Windows 2000 产品更新都包含 QChain.exe 功能。但是,2002 年 12 月以前发布的产品更新中存在一个问题,在某些情况下,该问题可能会在计算机上应用错误的二进制文件。2003 年 3 月,Microsoft 发布了 QChain.exe 的更新版本解决了此问题。 有关此问题或如何获得更新的 Qchain.exe 工具的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
815062 (http://support.microsoft.com/kb/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 上都可以运行。 |
815062 (http://support.microsoft.com/kb/815062/) 串联多个修复程序时正确的文件未安装
串联更新安装时不使用 QChain.exe 是不安全的
安装更新时,如果一个文件被锁定或正在使用,则无法替换它。因此,该文件被放在 Pending File Rename 队列中,在计算机重新启动后进行替换。在下面的情况下,会发生此问题:| • | 安装了更新 A 和 B,但在两次安装之间没有重新启动计算机。 |
| • | 这两个程序包都包含文件 X。程序包 A 的文件 X 为版本 3;程序包 B 的文件 X 为版本 2。计算机中文件 X 为版本 1。 |
| • | 当安装程序包 A 时,它会将它的文件 X 版本放置在 Pending File Rename 队列中。 |
| • | 当安装程序包 B 时,它会将它的文件 X 版本放置在 Pending File Rename 队列中。 |
| • | 重新启动计算机时,因为程序包 B 是最后安装的,所以会安装它的文件 X 的版本(在 Pending File Rename 队列中,最后一个文件是所使用的文件)。因此,会安装版本 2,而不是按照您预期的那样安装版本 3。 |
如果安装了以前串联的更新而没有重新启动
虽然这种情况很少见,但是最好验证一下计算机是否具有您认为已安装的所有修复程序。要验证这一点,请使用 Qfecheck.exe 工具。 有关 Qfecheck.exe 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:282784 (http://support.microsoft.com/kb/282784/) Qfecheck.exe 验证 Windows 2000 和 Windows XP 修复程序的安装
QChain.exe 会清理注册表中的 Pending File Rename Operations 项以确保在计算机重新启动后只安装文件的最新版本。
在只重新启动一次的情况下安装多个更新
| 1. | 使用 -z 开关运行更新安装程序,以指示安装程序在安装后不要重新启动。如果您不希望在安装期间显示提示或消息,请添加 -m 开关(表示“安静”模式)。 更新安装程序是下列程序之一:
| ||||
| 2. | 安装了所有修复程序后,请运行 QChain.exe。 | ||||
| 3. | 重新启动计算机。 |
@echo off
setlocal
set PATHTOFIXES=some path
%PATHTOFIXES%\Q123456_w2k_sp2_x86.exe -z -m
%PATHTOFIXES%\Q123321_w2k_sp2_x86.exe -z -m
%PATHTOFIXES%\Q123789_w2k_sp2_x86.exe -z -m
%PATHTOFIXES%\qchain.exe
如何获取 QChain.exe
自 2001 年 5 月 18 日以后发布的所有 Windows XP 和 Windows 2000 更新中均包含 QChain.exe 功能,但是 2002 年 12 月之前发布的更新中存在一个问题,在某些情况下,该问题可能会导致在计算机中放置错误的二进制文件。2003 年 3 月,Microsoft 发布了 QChain.exe 的更新版本解决了此问题。 有关此问题或如何获得最新的 Qchain.exe 工具的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:815062 (http://support.microsoft.com/kb/815062/) 串联多个修复程序时正确的文件未安装
QChain.exe 命令语法
qchain [logfilename]
可选的 [logfilename] 参数使用 Pending File Rename Operations 项的前后快照来创建文件。
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
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 注册表项中列出的二进制文件加载到内存中,所以在计算机重新启动前,更新安装程序必须用修复的二进制文件替换目标二进制文件。因此,在重新启动时,更新安装程序不会创建 Pending File Rename Operation 来替换该二进制文件。相反,更新会将当前的二进制文件移动到一个临时位置,将修复的二进制文件放置在当前的二进制文件曾经所处的位置,然后创建 Pending File Rename Operation 以便在计算机重新启动时删除当前的二进制文件。
QChain 只影响执行二进制文件替换操作的 Pending File Rename Operations。它对执行删除操作的 Pending File Rename Operation 没有任何影响。
所有 Windows NT 4.0 更新和所有早于 SP2 的 Windows 2000 更新都使用 GetFileVersionInfo 来识别文件的版本。如果您安装两个或更多个 Windows NT 4.0 更新或早于 SP2 的 Windows 2000 更新,并且这些更新程序包包含重叠的 KnownDLLs,则使用 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,因此更新安装程序确定需要替换文件。
| ||||
| • | 安装程序包 B 时,GetFileVersionInfo 仍然会报告计算机中安装了 Kernel32.dll 版本 1,因为 GetFileVersionInfo 从加载到内存中的 Kernel32.dll 中读取版本信息。程序包 B 具有版本 2,因此修复程序确定需要替换文件。
| ||||
| • | QChain 在运行,但是不存在用于替换文件的 Pending File Rename Operations,因此 QChain 不执行任何操作。 | ||||
| • | 因为程序包 B 是最近安装的,所以程序包 B Kernel32.dll 版本 2 位于计算机上的正确位置。因此,在计算机重新启动时,会将它加载到内存中。Pending File Rename Operations 将同时删除原来的 Kernel32.dll 版本 1 和程序包 A 的 Kernel32.dll 版本 3。因此,计算机现在具有 Kernel32.dll 版本 2 而不是版本 3。 |
如果您重新演示前面的情况,并使用 Windows 2000 SP2 以后的更新,则程序包 B 中的修复程序会映射程序包 A 的 Kernel32.dll 并识别版本 3(该版本高于程序包 B 自己的 Kernel32.dll 版本 2)。因此,程序包 B 不会替换系统中的 Kernel32.dll,并且程序包 A 的 Kernel32.dll 版本 3 是计算机在重新启动后正确使用的版本。



回到顶端