多个修补示例
以下示例演示了如何使用 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 版。