常见的DLL在WiX中应该具有相同的组件ID吗?

3
我正在为客户/服务器应用程序编写几个安装包。 我正在使用Wix Toolkit,如建议的那样,每个DLL都被包装为其自己的组件,具有唯一的ID。
有一些常见的DLL需要在两个包中安装。 这些DLL应该具有相同的组件GUID还是在每个包中都应该不同?

它们可能是常见的DLL,但它们是否安装在相同位置? - Damien_The_Unbeliever
客户需要它们在GAC中,而我计划将服务器安装目录放在服务器上。 - Jon Mitchell
2个回答

5
根据您对我的评论的回复,如果客户端和服务器都安装在同一台计算机上,情况会变得特别糟糕。
来自Windows Installer Components
两个共享相同组件ID的组件被视为同一组件的多个实例,无论它们的实际内容如何。任何组件只能在用户计算机上安装一个实例。
(强调添加)。
另外:
每个组件必须存储在单个文件夹中。
以下要点可能听起来与此相矛盾:
不应将任何文件、注册表项、快捷方式或其他资源作为多个组件的成员发布。

但实际上这是把事情说反了 - 如果你有两个安装程序将同一个DLL安装到相同的位置,它们必须是同一组件的一部分。文件的位置(以及其名称、内部位、版本等)非常重要。


关于我的回答的第一行,考虑到你计划要做的事情——如果服务器已经安装(DLLs在服务器目录下),然后客户端被安装,那么这些DLLs将不会存在于GAC中,因此客户端应用程序将无法工作。


所以它们应该具有不同的组件ID。出于兴趣,如果两个安装程序都将文件放入GAC中,那么使用相同的ID是否可以? - Jon Mitchell
1
@JonMitchell - 如果它们都安装在同一位置,则适用第二个要点 - 它们应该具有相同的ID,以便可以按任意顺序卸载它们(组件是引用计数的)。 - Damien_The_Unbeliever

1

已安装的组件通过它们的GUID和keypath进行识别。

如果两个软件包都将组件安装到相同位置,则重要的是两个软件包使用相同的GUID,以便正确地引用计数该组件。

如果两个软件包将组件安装到不同位置,则无论GUID是否相同,它们都将被分别管理,因为keypath不同。在这种情况下,GUID是否相同并不重要。

结论:您应该保持GUID相同

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

如果使用wixlib,则不需要考虑GUID的问题,因为没有任何时候您能够更改它们以适用于不同的软件包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接