1

我有一个共享 dll(COM 对象),我们称之为 Utility.dll,它由多个产品安装。在我的 WIX 文件中,我将 Utility.dll 作为一个单独的组件安装。

现在我发布了新版本 2.0,并使用相同的组件 GUID 和路径。从理论上讲,他的组件应该引用计数,但这不是发生的事情:

  1. 安装产品 1 1.0 ( Utility.dll 1.0)
  2. 安装产品 2 2.0 ( Utility.dll 2.0)

磁盘上的 Utility.dll 是 2.0

  1. 删除产品 1 1.0 并删除 Utility.dll。

以前的安装程序是在 InstallShield 中编写的,而当前的安装程序是在 Wix3 中编写的。Utility.dll 的组件 GUID 和路径相同(仔细检查)。

4

2 回答 2

1

我刚刚遇到了同样的问题,并且文件被卸载,因为这两个组件之间的 KEYPATH 不同。在我的情况下,我在较新版本的安装程序中添加了一个伴随文件,以确保安装了最新的文本文件。因为一个文件不能是 KEYPATH 并且有一个伴随文件,所以我被迫更改 KEYPATH。

您可以通过反向搜索组件 GUID 的前 8 个字符在注册表中找到该组件。该注册表文件夹将为安装该 GUID 的每个 MSI 提供一个密钥,并且数据字段将显示 KEYPATH。我的猜测是 KEYPATH 对于 1.0 版的机器和 2.0 版的机器是不同的。

于 2014-10-29T15:21:13.847 回答
1

在详细日志文件中查找Component. 您应该会看到指示是否有其他客户端(产品)的消息Component。这将解释为什么卸载会删除该文件。

于 2013-04-17T21:02:25.103 回答