Windows installer 永久注册表项-orca-msi guid

Windows installer 永久注册表项-orca-msi guid,windows-installer,guid,orca,Windows Installer,Guid,Orca,使用.msi包,如果注册表项不存在,我想创建几个注册表项;如果注册表项确实存在,我想不去管它们;如果程序被删除,我想不删除它们。我使用Orca将条目添加到以下msi表中来完成此操作:Components、FeatureComponents、Registry和LockPermissions。我的问题是,对于这些键在组件表的组件ID中使用的GUID,我应该怎么做?似乎有三种选择 1分配它们一次,并在msi的未来版本中保留它们 2每次生产新版本时,分配新版本 3使用NULL per我还没有尝试过这个

使用.msi包,如果注册表项不存在,我想创建几个注册表项;如果注册表项确实存在,我想不去管它们;如果程序被删除,我想不删除它们。我使用Orca将条目添加到以下msi表中来完成此操作:Components、FeatureComponents、Registry和LockPermissions。我的问题是,对于这些键在组件表的组件ID中使用的GUID,我应该怎么做?似乎有三种选择

1分配它们一次,并在msi的未来版本中保留它们

2每次生产新版本时,分配新版本

3使用NULL per我还没有尝试过这个

其中一个比另一个更受欢迎吗?两者之间有什么后果吗?如果程序被删除,我宁愿留下尽可能少的东西

我也想知道下面关于永久属性位16的评论是什么意思

如果设置了此位,则安装程序在卸载期间不会删除该组件。安装程序在Windows installer注册表设置中为组件注册一个额外的系统客户端


在哪里可以找到这些条目?

来自Windows Installer MSDN主题:

永远不要创建两个相同的组件 以相同的名称安装资源 和目标位置。如果是资源 必须重复多次 组件,更改其名称或目标 每个组件中的位置。这条规则 应跨应用程序应用, 产品、产品版本和 公司

选项2将在每次发布新版本时为同一注册表项有效地创建一个新组件,这违反了引用的规则

通过将组件GUID设置为GUID=,可以在wix中完成选项3。它将使windows installer安装组件资源,然后忘记该组件。从不会删除已安装资源的意义上讲,这可能会满足您的需要。但是,这也意味着,如果注册表项丢失,修复将无法恢复它们


因此,您应该选择具有固定GUID的选项1,并设置永久属性以使组件的引用计数不为零。windows installer如何在内部执行此操作是一个您不应该关心的实现细节,因此我不认为查找这些windows installer注册表设置有什么意义。

还有一个问题。您引用的MSDN参考资料中的“名称”是什么意思?根据您的回答,我认为“Name”是GUID或组件表条目的组件和GUID字段的某种组合。顺便说一句,我更喜欢1,因为我可以用一个Orca transfrom来完成,而无需任何后续编辑。“name”表示已安装资源的名称,即文件名或注册表项“两个组件”的意思是“两个具有不同guid的组件”。好吧,我很确定我理解了,但如果没有强烈的暗示,我不会得出这个结论。