修补程序包

Windows Installer 修补程序(.msp 文件)是用于将更新传送到 Windows Installer 应用程序的文件。 修补程序是一个自包含包,其中包含更新应用程序所需的所有信息。 修补包(.msp 文件)可以比整个更新应用程序的 Windows Installer 包(.msi 文件)小得多。 有关向应用程序传送较小更新的详细信息,请参阅 减少修补程序大小

修补程序包包含应用程序的实际更新,并描述应用程序可以接收修补程序的版本。 修补程序至少包含两个数据库转换。 一个转换更新应用程序的安装数据库中的信息。 另一个转换将添加安装程序用于修补文件的信息。 安装程序使用转换提供的信息来应用修补程序包的内阁文件流中存储的修补程序文件。 修补程序包没有像安装包这样的数据库(.msi 文件)。

从 Windows Installer 版本 3.0 开始,修补程序包可以包含有关 MsiPatchSequence 表中其他更新的修补序列描述的信息,以及 MsiPatchMetadata 表中的其他描述性信息。

用户可以从网络管理映像安装应用程序和更新。 尽管修补程序包可以应用于管理安装,但建议的传递更新方法是让用户安装原始应用程序,然后将修补程序应用到其计算机上的应用程序本地实例。 这样,用户就能够与管理映像保持同步。 如果修补程序应用于管理安装,该管理安装的所有客户端必须重新缓存并重新安装应用程序才能接收更新。 在用户重新缓存并重新安装之前,用户无法从修补的管理安装进行按需安装并修复安装。

从 Windows Installer 3.0 开始,非管理员可以在修补程序被批准为管理员信任后,将修补程序应用到每用户托管的应用程序。 有关如何执行此作的详细信息,请参阅 修补 Per-User 托管应用程序。 另一种方法是使用最低特权用户帐户修补。

注意

如果 AllowLockdownPatch 策略已设置,则非管理员用户可以在提升的权限下运行安装时将修补程序应用到现有应用程序。 不建议使用此方法,因为它允许将不受信任的修补程序应用于可以使用提升的权限运行的应用程序。

 

修补程序包由以下部分组成。 有关修补程序包的构造的详细信息,请参阅 创建修补程序包

摘要信息流

修补程序包的摘要信息流提供有关修补程序的标识和用途的信息。

摘要信息流至少包含以下各项:

  • 唯一标识修补程序的 GUID。 此修补程序的 GUID 将追加到此修补程序所替换的早期修补程序的 GUID 列表。
  • 此修补程序的有效目标的产品名称列表以分号分隔。
  • 以分号分隔的转换子存储名称列表,其顺序是处理它们。
  • 此修补程序的以分号分隔的源列表。

转换子存储

修补程序包包含可添加或删除文件、注册表项、用户界面和自定义项的转换。 转换作为子存储包含在包中。 修补程序包包含每个目标数据库的两个转换。 一个转换是安装数据库的实际更新,是从安装包的原始映像和更新映像之间的差异生成的。 其他转换将条目添加到 PatchPatchPackageMediaInstallExecuteSequence,以及 AdminExecuteSequence 表。 子存储中的信息将它与特定的 UpgradeCodeProductCodeProductVersionProductLanguage关联。 可应用于多个目标的修补程序包包含这些转换中的多个对。

Cabinet 文件流

修补程序中包含的内阁文件流可以包含以下类型的文件:

  • 修补文件,其中包含将旧版文件更改为新版本所需的信息。 单个修补程序文件可用于更新文件的一个或多个旧版本。
  • 要添加到旧版本中不存在的应用程序的其他文件。
  • 整个替换文件。 在极少数情况下,文件的新版本小于更新该文件的旧版本所需的修补程序,新文件可以全部包含在该文件中。 这些是在其旧版本上安装的新文件。

创建修补程序包