wix将ComponentGroup重用于不同的目录

问题描述 投票:0回答:1

我目前正在使用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>

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

我怎样才能做到这一点?

c# wix windows-installer
1个回答
2
投票

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

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

ComponentGroup

我在使用ComponentGroup的示例项目中尝试了这个,但我无法在多个位置部署相同的组件。所以我通读了Windows安装程序文档,这是我遇到的内容:

  1. 用户计算机上只安装了任何组件的单个实例。
  2. 永远不要创建两个在相同名称和目标位置下安装资源的组件。如果必须在多个组件中复制资源,请在每个组件中更改其名称或目标位置。此规则应适用于应用程序,产品,产品版本和公司。

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

Windows Installer

Windows Installer Components

© www.soinside.com 2019 - 2024. All rights reserved.