WiX: функции, содержащие идентичные каталоги, но должны быть объединены в один уникальный каталог во время установки - PullRequest
0 голосов
/ 09 июля 2011

Я пытаюсь создать установщик для приложения. Мое приложение содержит корневое приложение и набор дополнительных продуктов, которые можно установить независимо. Я хотел бы создать установщик для управления установкой по выбору.

После компиляции и компоновки я получаю следующую структуру.

Для MyAppRoot:

  • .. \ MyAppRoot \ bin
  • .. \ MyAppRoot \ config
  • .. \ MyAppRoot \ config \ http
  • .. \ MyAppRoot \ config \ was
  • и другие подкаталоги
  • ...

Каждый субпродукт имеет одну и ту же организацию:

Для MySubPrd:

  • .. \ MySubPrd \ bin
  • .. \ MySubPrd \ config
  • .. \ MySubPrd \ config \ http
  • .. \ MySubPrd \ config \ was
  • и другие подкаталоги
  • ...

Итак, у меня есть полный набор подпрограмм (MySubPrd1, MySubPrd2, ..., MySubPrdN).

Во время установки SubPrd1 необходимо объединить с приложением MyAppRoot (всегда установлено).

Для сборки моего установщика я сначала собираю все файлы в MyAppRoot и MySubPrd1, MySubPrd2, ..., MySubPrdN, чтобы создать выделенные файлы .wxs, связанные с каждым субпродуктом.

set ROOT_BINARY=D:\Prj\MyAppRoot
heat dir %ROOT_BINARY% -cg MyRootApp -gg -scom -sreg -sfrag -srd -dr INSTALLLOCATION  -out %OUT_BUILD_WXS%\root.wxs -var env.ROOT_BINARY

set ROOT_PRD1=D:\Prj\MySubPrd 
heat dir %ROOT_PRD1% -cg MySubPrd1 -gg -scom -sreg -sfrag -srd -dr INSTALLLOCATION  -out %OUT_BUILD_WXS%\prd1.wxs -var env.ROOT_PRD1

и то же самое для других SubPrd.

У меня есть основной файл WXS, используемый для сборки моего установщика, я создаю набор функций:

<Feature Id='Complete' 
         Title='ROOT Application' 
         Description='The application.' 
         Display='expand' 
         Level='3' 
         ConfigurableDirectory='INSTALLLOCATION'>
  <ComponentRef Id="Shortcut" />

  <Feature Id="RootApp" 
           Title="Main Application RootApp" 
           Description="...." 
           Level="3">
    <ComponentGroupRef Id="MyRootApp" />
  </Feature>

  <Feature Id="MySubPrd1App" 
           Title="Option1" 
           Description="...." 
           Level="1000">
    <ComponentGroupRef Id="MySubPrd1" />
  </Feature>

  <Feature Id="MySubPrd2App" 
           Title="Option2" 
           Description="...." 
           Level="1000">
    <ComponentGroupRef Id="MySubPrd2" />
  </Feature>

</Feature>

Все в порядке, кроме ссылки, я получаю много ошибок:

ошибка LGHT0130: первичный ключ 'dir022180FDDE4E69878C4D1206C73EED8D' дублирован

После проверки я обнаружил, что ошибка связана с каталогами. Кажется, WiX не распознает, что функции должны быть объединены в одном и том же пути. Некоторые каталоги содержат точно такие же файлы (например, ..\MyAppRoot\config\ws содержит точно такие же файлы, что и .. \ MySubPrd1 \ config \ ws

Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Вам придется использовать XSL-преобразование для очистки выходных данных. Тепло не понимает совпадения с другими независимыми вариантами тепла сегодня.

0 голосов
/ 25 июля 2011

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

...