Я пытаюсь создать установщик для приложения. Мое приложение содержит корневое приложение и набор дополнительных продуктов, которые можно установить независимо. Я хотел бы создать установщик для управления установкой по выбору.
После компиляции и компоновки я получаю следующую структуру.
Для 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
Как я могу решить эту проблему?