WiX: использование нескольких кабинетов в очень большом приложении

Недавно я начал изучать и использовать WiX, и мой первый настоящий проект с WiX - это переупаковка пользовательской конфигурации Qt. Это было довольно сложно, поскольку проект Qt огромен.

Мне удалось очень неэлегантно проложить себе путь через этот процесс, но недавно я столкнулся с проблемой при связывании. Я получаю сообщение об ошибке Light.exe «LGHT0296», скорее всего, потому, что я создавал CAB-файл размером намного больше 2 ГБ. После попытки достичь наивысшего уровня сжатия, и это не имело значения, мне осталась единственная возможность - разделить установочный пакет на более чем один файл CAB (примечание: возвращенная ошибка была чрезвычайно полезной, чтобы сообщить мне, какие курсы действие, чтобы попробовать).

В любом случае, я немного заблудился, когда дело дошло до создания нескольких файлов CAB. Я не совсем уверен, что мне делать в этом случае, и мне не удалось найти какой-либо полезной документации или примеров, где выполняется это разделение. Как мне лучше всего это сделать?

Спасибо.


person Mark E.    schedule 18.02.2010    source источник


Ответы (1)


Вы просто объявляете несколько медиаэлементов следующим образом:

  <Media Id='1' Cabinet='package1.cab' EmbedCab='no'/> 
  <Media Id='2' Cabinet='package2.cab' EmbedCab='no'/>

Если у вас достаточно места на установочном носителе и вы бы предпочли исключить время и дисковое пространство, которые установщик использует для распаковки файлов, вы также можете поместить распакованные файлы в какую-либо папку относительно MSI, например (вы даже можете создать MSI, который устанавливает себя таким образом):

  <Media Id='3' Layout="./somefolder" />

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

  <File Source="./somefile" DiskId="2" />
person Wim Coenen    schedule 18.02.2010
comment
Ок, отлично. Похоже, я был на правильном пути, мне просто нужно назначить DiskIds отдельным файлам. Единственная проблема в том, что у меня больше 30к файлов. Есть ли простой способ сделать это, или мне просто нужно сделать для этого сценарий? (Похоже, этот DiskId может быть хорошим переключателем для добавления в Heat?) - person Mark E.; 18.02.2010
comment
Вы можете использовать XSLT для добавления DiskId ко всем элементам File с помощью переключателя Heat -t или атрибута Transform для HeatDirectory в wixproj. Я использую Heat для динамического создания файлов wxs при каждой сборке. XSLT можно использовать для удаления файлов или замены идентификатора тепла на статический. - person Novaterata; 07.05.2015