修补程序包

Windows Installer 修补程序 (.msp 文件) 是一个用于向 Windows Installer 应用程序提供更新的文件。 修补程序是一个自含包,其中包含更新应用程序所需的所有信息。 修补程序包 (.msp 文件) 可能比整个更新应用程序的 Windows Installer 包 (.msi 文件) 要小得多。 若要详细了解如何向应用程序提供缩减大小的更新,请参阅减小修补程序大小

修补程序包包含对应用程序的实际更新,并说明哪些应用程序版本可以接收修补程序。 修补程序至少包含两个数据库转换。 一个转换更新应用程序安装数据库中的信息。 另一个转换添加安装程序用于修补文件的信息。 安装程序使用转换提供的信息来应用修补程序包的 Cabinet 文件流中存储的修补程序文件。 修补程序包没有类似于安装包(.msi 文件)的数据库。

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

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

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

注意

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

 

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

摘要信息流

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

摘要信息流至少包含以下内容:

  • 唯一标识修补程序的 GUID。 此修补程序的 GUID 后追加了由此修补程序替换的早期修补程序的 GUID 列表。
  • 此修补程序有效目标的产品代码列表(以分号分隔)。
  • 按处理顺序排列的转换子存储名称列表(以分号分隔)。
  • 此修补程序的源列表(以分号分隔)。

转换子存储

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

Cabinet 文件流

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

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

创建修补程序包