【问题标题】:Can WiX Component GUIDs Be Duplicated Across Different Product InstallsWiX 组件 GUID 可以在不同的产品安装中复制吗
【发布时间】:2021-04-10 18:09:17
【问题描述】:

我正在筛选现有问题,但我看到没有一个问题能在这个基本层面上明确回答这个问题。我在记事本中构建我的 WXS 文件,而不是从 IDE。

我的情况是:我有多个应用程序使用一些相同的程序集。这些程序集与 exe 一起安装到单独的应用程序文件夹中,因此它们不会相互共享。它们可能是不同的版本。文件夹看起来像:

App1:main1.exe、1.dll、2.dll
App2:main2.exe、1.dll
App3:main3.exe、1.dll、2.dll

我正在模板化我的 WXS 文件,但在我走得太远之前,我想弄清楚我是否可以跨应用程序复制/粘贴组件元素。

App1.wxs:

<Component Id='AudioLibrary' Guid='1111-1111111-1111111-11111' Win64='yes'>
    <File Id='AudioDLL' Source='1.dll' KeyPath='yes' />

App2.wxs

<Component Id='AudioLibrary' Guid='1111-1111111-1111111-11111' Win64='yes'>
    <File Id='AudioDLL' Source='1.dll' KeyPath='yes' />

这两个条目是否会在跨不同应用程序的升级/卸载操作中相互干扰?

通常,数据库结构允许这种类型的复制,因为父级将是唯一的产品 guid。但是我看到很多抱怨说 MSI 一定是在 70 年代写的,当时每个人都喝高了。因此,在我浪费时间构建所有东西之前,先检查一下我是否正在为失败做好准备。

编辑:我还想将其应用于 SQL 脚本组件;我可以将 sn-p 复制/粘贴到任何 wxs 文件中而不必为其生成新的 GUID 吗?

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    组件 GUID 和绝对路径:请阅读这个旧答案:When to change component GUIDS。本质上,绝对路径和组件 GUID 之间存在 1:1 的关系。如果更改文件名或安装到不同的文件夹,则必须创建新的组件 GUID。因此,如果您为所有产品安装到同一个文件夹,您应该为您安装的内容使用相同的组件 GUID。如果您安装到每个产品的新文件夹,它们应该有不同的组件 GUID。

    合并模块:共享组件一般通过merge modules安装。作为一个概念,我个人更喜欢 WiX 包含文件而不是合并模块。

    WiX Include Files:WiX 包含文件的前提是您可以在其自己的源代码和include in any number of setups 中声明一组组件,就像 C++ 头文件一样。如果您let the component GUIDs be auto-generated 您应该能够在不同的 MSI 文件中包含相同的 WiX 包含文件,并且逻辑将负责为组件生成新的 GUID,或者根据它们所针对的磁盘位置使用相同的 GUID。 我没有测试过这个Here is Rob Mensching himself on the auto-GUID concept.


    链接:

    【讨论】:

    • 不幸的是,这是指在 wxs 文件中更改组件本身。它不涉及在独立的、不相关的 wxs 安装中重用组件元素。组件本身永远不会改变,因为这些是我在所有应用程序中使用的标准库。
    • 如果文件转到不同的文件夹,它们应该有不同的组件 GUID。如果您忽略 GUID 并尽可能使用自动 GUID,这应该为您处理 GUID 逻辑。 Do you deliver several applications with one MSI?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多