更改产品代码

产品代码是一个 GUID,即应用程序或产品的主体标识。 请参阅产品代码

符合以下准则的更新通常不需要更改产品代码,并且可以作为小型更新处理,或者如果版本要更改,则作为次要升级处理:

  • 更新可以扩大或缩小特征组件树,但不得重新组织特征和组件(由 FeatureFeatureComponents 表描述)的现有层次结构。 更新可以向现有功能组件树添加新功能。 如果移除某个父功能,则还必须移除已移除功能的所有子功能。
  • 更新可以将新组件添加到新功能或现有功能。
  • 更新不得更改任何组件的组件代码。 因此,小型更新或次要升级不得更改组件密钥文件的名称,因为这需要更改组件代码。
  • 更新不得更改安装包的 .msi 文件的名称。 相反,因为它修改了包,所以它应该更改包代码。 请注意,这意味着更新可以更改 .msi 文件中的表、自定义操作和对话框,而无需更改文件的名称。
  • 更新可以添加、删除或修改两个或更多功能不共享的文件、注册表项或组件的快捷方式。 如果更新修改了版本控制的文件,则必须在 File 表中递增该文件的版本。 如果更新移除了资源,则还应更新 RemoveFileRemoveRegistry 表,以移除已安装但未使用的任何文件、注册表项或快捷方式。
  • 由两个或多个功能共享的组件的更新必须与使用该组件的所有应用程序和功能向后兼容。 更新可以修改共享组件的资源,例如文件、注册表项和快捷方式,只要更改向后兼容即可。 不建议更新在共享组件中添加或移除文件、注册表项或快捷方式。
  • 小型更新作为 Windows Installer 修补程序包提供。 (完整的产品 CD-ROM 通常不提供小型更新。)

如果更新满足以下任一条件,则必须更改产品代码:

  • 必须能够在同一系统上同时安装原始和更新的产品。
  • .msi 文件的名称已更改。
  • 现有组件的组件代码已更改。
  • 组件已从现有功能中移除。
  • 现有功能已转换为现有功能的子功能。
  • 现有子功能已从其父功能中移除。

请注意,将完全由新组件组成的新子功能添加到现有功能不需要更改产品代码。

可以通过在功能表的“属性”字段中包括 msidbFeatureAttributesFollowParent 和 msidbFeatureAttributesUIDisallowAbsent 来创作新的子 功能。 如果次要升级仅添加新的子功能,则 REINSTALL=ALL 足以强制安装新的子功能。 有关详细信息,请参阅 控制功能选择状态

用户可能会隐藏新的子功能。 若要将新子功能的安装状态与其父功能同步,请为子功能设置 msidbFeatureAttributesFollowParent 和 msidbFeatureAttributesUIDisallowAbsent 位。

关于属性

使用属性

属性参考