wix为不同的目录重用ComponentGroup

时间:2019-02-12 15:34:04

标签: c# wix windows-installer

我目前正在使用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 个答案:

答案 0 :(得分:2)

您需要使用ComponentGroup ELement中的Directory元素。

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

ComponentGroup

我在使用ComponentGroup的示例项目中尝试了此操作,但无法在多个位置部署相同的组件。因此,我通读了Windows Installer文档,这是我遇到的问题:

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

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

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

Windows Installer

Windows Installer Components