共同DLL应该在WiX中具有相同的组件ID

时间:2012-06-01 13:34:32

标签: .net installer wix windows-installer

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

需要在两个软件包中安装一些常见的DLL。这些DLL应该具有相同的组件GUID,还是应该在每个包中都不同?

2 个答案:

答案 0 :(得分:5)

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

来自Windows Installer Components

  

共享相同组件ID的两个组件被视为同一组件的多个实例,无论其实际内容如何。 在用户的计算机上只安装了任何组件的单个实例。

(强调补充)。

加:

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

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

  
      
  • 不得将文件,注册表项,快捷方式或其他资源作为多个组件的成员发送。
  •   

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


Re:我的回答的第一行,并给出你打算做什么 - 如果安装了服务器(服务器目录中的DLL),然后安装了客户端,那么DLL将出现在GAC中,因此客户端应用程序无法运行。

答案 1 :(得分:1)

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

如果两个软件包都将组件安装到相同的位置,那么两个软件包使用相同的GUID非常重要,这样才能正确引用组件。

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

结论:您应该保持GUID相同

另外,wix鼓励您通过将组件定义编译为wixlib来共享组件定义,然后在构造不同的安装程序包时使用该wixlib。它与您创建DLL然后在不同应用程序中使用该DLL的方式类似。

如果您使用wixlib,您的GUID问题甚至不会出现,因为没有必要为不同的软件包更改它们。