永久注册表键 - orca - msi guid

时间:2009-12-27 13:48:04

标签: windows-installer guid orca

使用.msi包,我想创建一些注册表项(如果它们不存在),如果它们存在则不管它们,如果删除该程序则不删除它们。我通过在以下msi表中添加条目来完成此操作(使用Orca):Components,FeatureComponents,Registry,& LockPermissions。我的问题是我该如何处理这些键的Component表的ComponentID中使用的GUID?似乎有3种选择。

1)在msi的未来版本

中分配一次并将它们单独留下

2)每次制作新版本时都会分配新的

3)使用NULL(每http://msdn.microsoft.com/en-us/library/aa368007(VS.85).aspx)我没试过。

其中一个优先于另一个吗?一个人对另一个人有任何后果吗? (如果程序被删除,我宁愿尽可能地留下一些东西)。

我也很想知道关于永久属性位(16)的以下注释是什么意思。

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

这些条目可能会在哪里找到?

1 个答案:

答案 0 :(得分:0)

从Windows Installer MSDN主题Organizing Applications into Components

  

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

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

通过将组件GUID设置为Guid="",可以在wix中完成选项(3)。它将使Windows安装程序安装组件资源,然后“忘记”组件。从安装资源不会被删除的意义上讲,这可能会做你想要的。但是,这也意味着如果丢失,“修复”将无法恢复注册表项。

因此,您应该选择具有固定GUID的选项(1),并设置永久属性以使该组件的引用计数保持非零。 Windows安装程序如何在内部执行此操作是一个您不应该关心的实现细节,因此我没有看到寻找 Windows安装程序注册表设置的重点。