修补

使用 Microsoft Windows Installer 安装的应用程序可以通过重新安装更新的安装包(.msi 文件),或通过将 Windows Installer 修补程序(.msp 文件)应用到应用程序来升级。

Windows Installer 修补程序(.msp 文件)是一个自包含包,其中包含对应用程序的更新并描述哪些版本的应用程序可以接收修补程序。 修补程序至少包含两个数据库转换,并且可以包含存储在修补程序包的 Cabinet 文件流中的修补程序文件。 有关 Windows Installer 修补程序包的各个部分的详细信息,请参阅修补程序包

通过提供 Windows Installer 修补程序而不是更新产品的完整安装包来为应用程序提供服务具有优势。 修补程序可以包含整个文件,也可以仅包含更新文件的一部分所需的文件位。 这使用户能够下载比整个产品的安装包小得多的升级修补程序。 使用修补程序的更新可以通过升级保留应用程序的用户自定义。

**Windows Installer 4.5 及更高版本:**

从 Windows Installer 4.5 开始,开发人员可以使用 Component 表中的 msidbComponentAttributesUninstallOnSupersedence 值标记修补程序中的组件。 如果安装了后续修补程序,并在其 MsiPatchSequence 表中标有 msidbPatchSequenceSupersedeEarlier 值以取代第一个修补程序,则 Windows Installer 4.5 及更高版本可以取消注销和卸载标有 msidbComponentAttributesUninstallOnSupersedence 值的组件来防止在计算机上留下未使用的组件。 如果组件未标有此位,则安装取代修补程序可能会在计算机上留下未使用的组件。 设置 MSIUNINSTALLSUPERSEDEDCOMPONENTS 属性的效果与为所有组件设置此位的效果相同。

**Windows Installer 3.0 及更高版本:**

使用 Windows Installer 3.0 并创作具有 MsiPatchSequence 表的修补程序包的开发人员可以创建执行以下操作的修补程序包:

  • 使用安装程序缓存的产品基线,通过较小的增量修补程序更轻松地为应用程序提供服务。 有关使用产品基线的详细信息,请参阅减小修补程序大小
  • 跳过与修补程序未修改的特定表关联的操作。 这可以显著减少安装修补程序所需的时间。 有关可以跳过哪些表的详细信息,请参阅修补程序优化
  • 创建并安装可以单独以任何顺序卸载的修补程序,而无需卸载并重新安装整个应用程序和其他修补程序。 有关卸载修补程序的详细信息,请参阅删除修补程序
  • 无论向系统提供修补程序的顺序如何,都按固定顺序应用修补程序。 有关 Windows Installer 如何确定用于应用修补程序的顺序的详细信息,请参阅序列化修补程序
  • 将修补程序应用于已在按用户托管的上下文中安装的应用程序。 有关详细信息,请参阅修补按用户托管的应用程序

**Windows Installer 2.0:**

不支持 MsiPatchSequence 表。 从 Windows Installer 3.0 开始,修补程序包可以包含描述修补程序相对于其他更新的修补顺序的信息和其他描述性信息。

创建修补程序包的建议方法是,使用修补程序创建工具,如 Msimsp.exePatchwiz.dll。 开发人员可以生成修补程序创建文件,如创建修补程序包部分中所述。 小型更新修补程序的创建在以下部分中有所介绍:小型更新修补示例

Microsoft Windows Installer 接受统一资源定位符 (URL) 作为修补程序的有效源。 有关如何在 Web 服务器上安装修补程序的详细信息,请参阅从 Internet 下载和安装修补程序

首次安装应用程序时,可以将单个 Windows Installer 修补程序(.msp 文件)应用于安装包。 有关详细信息,请参阅修补初始安装

如果修补应用程序可能需要访问原始安装源,则无法消除所有情况。 但是,为了最大程度地降低修补程序要求访问原始源的可能性,请遵守阻止修补程序要求访问原始安装源中列出的要点。

为了最大程度地降低修补程序不会因后续自定义转换而中断的可能性,通常先安装修补程序,然后再安装自定义。 首先安装自定义转换,然后安装修补程序可能会中断自定义。 有关修补自定义应用程序的详细信息,请参阅修补自定义应用程序