WIX: проблема с дублирующимся идентификатором и несколькими папками / функциями - PullRequest
4 голосов
/ 16 сентября 2010

Я новичок в Wix и создаю многофункциональный проект Wix.Наш продукт имеет 4 модуля, и каждый модуль должен быть включен в качестве функции в установщик Windows.Но все функции имеют одинаковую структуру папок.

Я использую командную строку для создания своего проекта Wix.После сборки каждого модуля в разные фрагменты wxs, light.exe выдает ошибку, сообщая, что дубликат идентификатора в таблице dirercoty.

Мое дерево файлов выглядит так ...используя следующие команды ...

@echo Harvesting target files....
heat.exe dir .\Mod1 -cg Mod1ComponentGroup -nologo -gg -scom -sfrag -sreg -srd -ke -dr INSTALLLOCATION -var var.mod1files -out Mod1Files.wxs

heat.exe dir .\Mod2 -cg Mod2ComponentGroup -nologo -gg -scom -sfrag -sreg -srd -ke -dr INSTALLLOCATION -var var.mod2files -out Mod2Files.wxs

heat.exe dir .\Mod3 -cg Mod3ComponentGroup -nologo -gg -scom -sfrag -sreg -srd -ke -dr INSTALLLOCATION -var var.mod3files -out Mod3Files.wxs

@echo Compile modules....
candle.exe -nologo myproj.wxs Mod1Files.wxs Mod2Files.wxs Mod3Files.wxs -dmod1files =.\Mod1 -dmod2files=.\Mod2  -dmod3files=.\Mod3

@Creating MSI...
set msi_name=MYProduct.1.0.12345.Win32.msi

light.exe -nologo -ext WixUIExtension -cultures:en-us myproj.wixobj Mod1Files.wixobj Mod2Files.wixobj Mod3Files.wixobj -o %msi_name%

Есть ли способ избежать ошибки Duplicate ID?

Любая помощь будет очень признательна.1015 *

Муту

Ответы [ 2 ]

4 голосов
/ 17 сентября 2010

Если бы вы использовали модули слияния, это было бы нормально, потому что к каждому идентификатору добавлялся уникальный идентификатор модуля.(dir1.GUIDA, dir1.GUIDB, dir1.GUIDC) Если вы используете фрагменты, вам нужно либо изменить идентификаторы, либо нормализовать структуру каталогов в один wxs и использовать DirectoryRef, чтобы перетащить его в другие wxs с вашими компонентами.

Я не уверен, что Жара справится со всем этим автоматически.Это действительно просто отправная точка.

0 голосов
/ 29 сентября 2010

У меня также была проблема, когда я генерировал несколько групп компонентов на основе папок, которые в конечном итоге попадали в одни и те же целевые установочные папки.

Если у вас установлен cygwin для использования инструментов Unix, то, что я сделал, чтобы устранить эти дубликаты ID, это использовал «sed» после каждой командной строки heat.exe, чтобы добавить префикс ко всем идентификаторам. Я просто добавляю эти команды sed, чтобы они были частью этапа предварительной сборки WIX, точно так же, как и тепловые.

Например:

sed -i 's / Directory \ Id = \ "/ Directory \ Id \" mod1 / g' "generatefile.wxs"

Эта командная строка заменит все (Directory Id = "...") на (Directory Id = "mod1 ...")

Это прекрасно работает, потому что на эти каталоги не ссылаются, а просто включают в компоненты, которые затем ссылаются на группы.

Надеюсь, это поможет

...