wix, повторно использующий ComponentGroup для разных каталогов - PullRequest
0 голосов
/ 12 февраля 2019

Я сейчас пишу установщик с 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 голосов
/ 12 февраля 2019

Вам необходимо использовать элемент Directory в элементе ComponentGroup.

Directory - устанавливает идентификатор каталога по умолчанию для дочерних элементов Component.

ComponentGroup

Я пробовал это в примере проекта с использованием ComponentGroup, и мне не удалось развернуть один и тот же компонент в нескольких местах.Итак, я прочитал документацию по установщику Windows и вот что мне встретилось:

  1. На компьютере пользователя установлен только один экземпляр любого компонента.

  2. Никогда не создавайте два компонента, которые устанавливают ресурс с одинаковым именем и целевым расположением.Если ресурс должен дублироваться в нескольких компонентах, измените его имя или местоположение назначения в каждом компоненте.Это правило должно применяться ко всем приложениям, продуктам, версиям продуктов и компаниям.

Подводя итог, можно указать ограничение установщика Windows.Если вы хотите установить один и тот же файл в нескольких местах, вы должны определить их как отдельные компоненты с разными идентификаторами.Один компонент может быть установлен только в одном месте с помощью MSI.Другой вариант - использовать элемент CopyFile

Установщик Windows

Компоненты установщика Windows

...