使用.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注册表设置中为组件注册一个额外的系统客户端。
这些条目可能会在哪里找到?
答案 0 :(得分:0)
从Windows Installer MSDN主题Organizing Applications into Components:
永远不要创建两个组件 以相同名称安装资源 和目标位置。如果是资源 必须重复多次 组件,更改其名称或目标 每个组件中的位置。这个规则 应该跨应用程序应用, 产品,产品版本和 公司。
每次发布新版本时,选项(2)都会为同一个注册表项有效地创建一个新组件,这违反了引用的规则。
通过将组件GUID设置为Guid=""
,可以在wix中完成选项(3)。它将使Windows安装程序安装组件资源,然后“忘记”组件。从安装资源不会被删除的意义上讲,这可能会做你想要的。但是,这也意味着如果丢失,“修复”将无法恢复注册表项。
因此,您应该选择具有固定GUID的选项(1),并设置永久属性以使该组件的引用计数保持非零。 Windows安装程序如何在内部执行此操作是一个您不应该关心的实现细节,因此我没有看到寻找 Windows安装程序注册表设置的重点。