1

使用 .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 注册表设置中为该组件注册一个额外的系统客户端。

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

4

1 回答 1

0

从 Windows Installer MSDN 主题将应用程序组织成组件

切勿创建两个以相同名称和目标位置安装资源的组件。如果必须在多个组件中复制资源,请更改其名称或在每个组件中的目标位置。此规则应适用于应用程序、产品、产品版本和公司。

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

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

因此,您应该选择具有固定 GUID 的选项 (1),并设置永久属性以保持组件的引用计数不为零。windows 安装程序如何在内部执行此操作是您不应该关心的实现细节,所以我看不出寻找那些windows 安装程序注册表设置的意义。

于 2009-12-27T14:30:38.950 回答