我应该何时更改或不更改 WIX 中的组件 GUID? Microsoft SDK 信息令人困惑。
Glytzhkof 编辑:为了澄清,问题涉及何时应为 MSI 组件更改组件 GUID。组件可以随以下方面发生变化:更改目标路径,向/从同一组件添加或删除文件,添加注册表数据等......这会导致所谓的组件引用问题,即最佳实践在 MSI 中创建组件。
我应该何时更改或不更改 WIX 中的组件 GUID? Microsoft SDK 信息令人困惑。
Glytzhkof 编辑:为了澄清,问题涉及何时应为 MSI 组件更改组件 GUID。组件可以随以下方面发生变化:更改目标路径,向/从同一组件添加或删除文件,添加注册表数据等......这会导致所谓的组件引用问题,即最佳实践在 MSI 中创建组件。
MSI 的总体概念是组件 GUID(唯一标识符)和绝对路径 (安装位置/密钥路径)之间存在1:1 映射。完整路径,包括文件名(如果有)。请参阅下面的更新以了解自动处理此问题的新 Wix 功能。
Rob Mensching(WiX 作者):
更多关于组件规则:
我使用一些简单的规则来处理过于复杂且违反直觉的组件规则(尤其是针对开发人员而不是部署专家):
SampleDriver.cat
, SampleDriver.inf
, SampleDriver.sys
, SampleDriver.cer
. 它们都必须匹配为一个“单元”以进行部署。一些样本:
更新:
自动组件 GUID:WIX 现在有一个新
auto-generate component GUID
功能,calculates a GUID
只要目标路径保持不变。老实说,我还没有尝试过,但很多人似乎都可以毫无问题地使用它,并且Rob Mensching (Wix author) states it is safe for normal use
. 作为一个概念,我强烈推荐这个,因为它具有一些自动魔法并保护你免受一些复杂性的影响。最小的 WiX 标记:另请注意,您可以从 Wix xml 文件中省略很多源属性,并依赖 Wix 默认值而不是硬编码值。
您永远不会更改 Component/@Guid。您也永远不会更改组件中的资源集(File、RegistryKey、Shortcut、TypeLib 等)。当你有一个新的资源时,你必须用一个新的@Guid 创建一个新的组件。真正棘手的部分是新组件不能与旧组件重叠(想想文件路径、注册表项路径或类型库等)。
这些基本上是组件规则,请查看:https ://robmensching.com/blog/posts/2003/10/18/component-rules-101/ 。
查看WiX 教程 The Files Inside,了解有关组件规则的详细说明。基本上,它表示您永远不会更改组件的 GUID,因为这意味着孤立旧组件并创建新组件。