代码之家  ›  专栏  ›  技术社区  ›  Peter

wix为不同目录重用componentgroup

  •  0
  • Peter  · 技术社区  · 5 年前

    我目前正在用wix编写安装程序。

    我把每个项目都投入到自己的项目中 ComponentGroup 像这样:

    <ComponentGroup Id="CG.MyLib" >
      <Component Id="C.MyLib" Guid="{349e5aa6-d935-48fe-9170-a36928c13545}" Directory="INSTALLFOLDER">
        <File Id="MyLib" Source="$(var.MyLib.TargetPath)" KeyPath="yes" Checksum="yes" />
      </Component>
    
      <!-- #region Referenced Projects -->
      <ComponentGroupRef Id="CG.A_COMPONENT_I_NEED_IN_MyLib" />
      <ComponentGroupRef Id="CG.AnotherDependendComponent" />
      <!-- #endregion Referenced Projects -->
    
      <!-- #region References -->
      <Component Id="MyLib_References" Guid="{0c77a027-2b1e-44fc-9c1d-fcda80acb740}" Directory="INSTALLFOLDER">
        <File Id="SomExtraDll_I_Need.dll" Source="$(var.MyLib.TargetDir)\SomExtraDll_I_Need.dll" />
      </Component>
      <!-- #endregion References -->
    
    </ComponentGroup>
    

    但现在我必须将同一组件组安装到多个目录中。

    我该怎么做?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Isaiah4110    5 年前

    您需要使用componentgroup元素中的directory元素。

    目录-设置子组件元素的默认目录标识符。

    ComponentGroup

    我在一个使用componentgroup的示例项目中尝试了这个方法,但我无法共享相同的组件,因此我阅读了Windows Installer文档,以下是我遇到的问题:

    1. 用户计算机上只安装了任何组件的单个实例。

    2. 永远不要创建两个组件,以相同的名称和目标位置安装资源。如果资源必须在多个组件中重复,请更改其名称或每个组件中的目标位置。此规则应适用于应用程序、产品、产品版本和公司。

    总而言之,这是Windows Installer的限制。如果要在多个位置安装同一个文件,则必须将其定义为具有不同ID的单独组件。单个组件只能使用MSI安装到一个位置。另一种选择是利用 CopyFile Element

    Windows Installer

    Windows Installer Components