3

我正在为客户端/服务器应用程序编写几个安装包。我正在使用 Wix Toolkit,并且建议每个 DLL 都被包装为具有唯一 ID 的自己的组件。

有一些常见的 DLL 需要安装在两个包中。这些 DLL 是否应该具有相同的组件 GUID,或者它们在每个包中是否应该不同?

4

2 回答 2

5

鉴于您对我的评论的回复,如果客户端和服务器都安装在同一台机器上,情况会变得特别糟糕。

Windows 安装程序组件

共享相同组件 ID 的两个组件被视为同一组件的多个实例,而不管它们的实际内容如何。用户计算机上仅安装任何组件的单个实例。

(强调补充)。

加:

  • 每个组件必须存储在一个文件夹中。

以下要点听起来可能与以下内容相矛盾:

  • 任何文件、注册表项、快捷方式或其他资源都不应作为多个组件的成员提供。

但这实际上是在反过来说——如果您有两个安装程序将同一个 DLL 安装到同一个位置,那么它们必须是同一个组件的一部分。重要的是文件的位置(以及它的名称、其中的位、版本等)。


回复:我的答案的第一行,并考虑到您打算做什么 - 如果安装了服务器(服务器目录中的 DLL),然后安装了客户端,则 GAC 中不会存在 DLL,因此客户端应用程序不起作用。

于 2012-06-01T13:54:47.880 回答
1

已安装的组件由它们的 GUID 和keypath 标识

如果两个包都将组件安装到相同的位置,那么两个包都必须使用相同的 GUID,以便正确地对组件进行引用计数,这一点很重要。

如果两个包都将组件安装到不同的位置,那么在任何情况下它们都将被单独管理,因为 keypath 不同。在这种情况下,GUID 是否相同并不重要。

结论:您应该保持 GUID 相同

顺便说一句,wix鼓励您通过将组件定义编译成wixlib,然后在构建不同的安装程序包时使用该 wixlib 来共享组件定义。这类似于您创建 DLL 然后在不同的应用程序中使用该 DLL 的方式。

如果您使用 wixlib,您的 GUID 问题甚至不会出现,因为您无法为不同的包更改它们。

于 2012-06-01T22:01:52.980 回答