多个修补示例

以下示例演示了如何使用 Windows Installer 3.0 及更高版本按照补丁的创作顺序应用补丁。

示例

在此示例中,有三个补丁:QFE1、QFE2 和 ServicePack1,每个都有一个 MsiPatchSequence 表。 这些补丁已经过创作,可应用于应用程序的 1.0 版。

Patch Name 补丁类型 序列号
QFE1 小型更新 1.1.0
QFE2 小型更新 1.2.0
ServicePack1 次要升级 1.3.0

 

每个补丁的 MsiPatchSequence 表都只有一条记录,其中包含补丁系列、产品代码和序列号。 这三个补丁都应用在同一个产品上,属于同一个补丁系列,名为 AppPatch。 所有补丁都没有 msidbPatchSequenceSupersedeEarlier 属性。

MsiPatchSequence 表,适用于 QFE1 小型更新

PatchFamily ProductCode 序列 特性
AppPatch {18A9233C-0B34-4127-A966-C257386270BC} 1.1.0

 

MsiPatchSequence 表,适用于 QFE2 小型更新

PatchFamily ProductCode 序列 特性
AppPatch {18A9233C-0B34-4127-A966-C257386270BC} 1.2.0

 

MsiPatchSequence 表,适用于 ServicePack1 次要升级

PatchFamily ProductCode 序列 特性
AppPatch {18A9233C-0B34-4127-A966-C257386270BC} 1.3.0

 

如果用户安装产品的 1.0 版,接着应用 QFE2,然后在稍后决定应用 QFE1,则 Windows Installer 可确保对产品应用补丁程序的实际顺序是在 QFE2 之前应用 QFE1。 如果用户应用 ServicePack1,然后在稍后同时应用 QFE2 和 QFE1,则 Windows Installer 可确保对产品应用补丁的实际顺序是 QFE1 在 QFE2 和 ServicePack1 之前应用。

如果 ServicePack1 在其 MsiPatchSequence 表的 Attributes 列中设置了 msidbPatchSequenceSupersedeEarlier,则意味着服务包包含 QFE1 和 QFE2 中的所有更改。 在这种情况下,应用 ServicePack1 时不会应用 QFE1 和 QFE2。

Windows Installer 2.0:不支持。 Windows Installer 3.0 之前的版本每次事务只能安装一个补丁,并且补丁是按提供的顺序应用的。 对于前面的示例,如果首先应用 QFE2,然后应用 QFE1,则这是两个事务,补丁应用到应用程序的版本 1.0,其顺序为先应用 QFE2,然后应用 QFE1。 如果首先应用 ServicePack1,则 QFE1 或 QFE2 不能在以后的事务中应用,因为 ServicePack1 是会更改应用程序版本的次要升级。 QFE1 和 QFE2 只能应用于应用程序的 1.0 版。