【问题标题】:Should common DLL's have the same component id in WiX常见的 DLL 是否应该在 WiX 中具有相同的组件 ID
【发布时间】:2012-06-01 13:34:31
【问题描述】:

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

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

【问题讨论】:

  • 它们可能是常见的 DLL,但它们是否安装到 same 位置?
  • 客户端在 GAC 中需要它们,而我计划在服务器安装目录中拥有的服务器。

标签: .net installation wix windows-installer


【解决方案1】:

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

来自Windows Installer Components

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

(添加了重点)。

加号:

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

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

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

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


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

【讨论】:

  • 所以他们应该有不同的组件ID。出于兴趣,如果两个安装程序都将文件放在 GAC 中,那么可以使用相同的 id 吗?
  • @JonMitchell - 如果它们都安装到同一个位置,那么第二个项目符号适用 - 它们应该具有相同的 id,以便可以按任一顺序卸载它们(组件被引用计数) .
【解决方案2】:

已安装的组件由其 GUID 和 keypath 标识。

如果两个包都将组件安装到相同位置,那么两个包使用相同的 GUID 很重要,这样组件的引用计数正确。

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

结论:您应该保持 GUID 不变

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2011-03-06
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多