我目前正在使用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>
但是现在我必须将相同的组件组安装到多个目录中。
我该怎么做?
答案 0 :(得分:2)
您需要使用ComponentGroup ELement中的Directory元素。
目录-设置子组件元素的默认目录标识符。
我在使用ComponentGroup的示例项目中尝试了此操作,但无法在多个位置部署相同的组件。因此,我通读了Windows Installer文档,这是我遇到的问题:
用户计算机上仅安装了任何组件的单个实例。
永远不要创建两个以相同名称和目标位置安装资源的组件。如果必须在多个组件中复制资源,请更改其名称或每个组件中的目标位置。此规则应适用于应用程序,产品,产品版本和公司。
总而言之,它是Windows安装程序的限制。如果要在多个位置安装同一文件,则必须将它们定义为具有不同ID的单独组件。单个组件只能使用MSI安装到一个位置。另一种选择是利用CopyFile Element