2014-10-16 3 views
1

Я связываю свой продукт с другими библиотеками, пытаясь упростить установку набора каталогов в нескольких установках. Цель состоит в том, чтобы повторно использовать xml-код, проблема заключается в том, что они должны быть установлены в корневом каталоге по требованию клиента.Как предотвратить изменения в каталогах после UISequence

Итак, у меня есть ComponentGroup s внутри WixLibrary.

Я установил свои каталоги в приложении Wix.

Но после CostFinalize непосредственно перед установкой Каталоги сбрасываются в значения по умолчанию, а не те, которые были выбраны моим пользователем во время последовательности диалогов.

Есть ли способ предотвратить это?

ответ

1

Ok, Перво-наперво:

  • Проблема заключается в том, что после того, как CostFinalize и все UI операции мои каталоги, где заменяются значениями по умолчанию.
  • Проблема возникла, когда я связал две разные библиотеки, которые использовали один и тот же глобальный каталог.
  • Папка установлена ​​в корневую папку Windows (по требованию клиента), а затем устанавливается значение по умолчанию. Тогда мы придаем Property так же, как мы делаем это для WIXUI_INSTALLDIR, в целом мы имеем следующее:
    • Один root папку для конкретных файлов инсталлятора
    • библиотека, которая устанавливает файлы 4 directories, которые не имеют никакого отношения к что root каталога.
    • Другая библиотека, которая устанавливает файлы и запускает сценарии до 1 directory из этих 4 внешних directories. Эта библиотека является единственной спецификацией для нашей установки.

Связывание все, что проблема сама по себе, это должно быть сделано в Product, в UI и используя PropertyRef указанный во внешней библиотеке. Кроме того, имейте в виду, что каждый PathEdit должен быть установлен в Indirect="yes", и вы должны установить все косвенную Properties которые указывают на вашу Directory в UI

Чтобы исправить эту проблему очень просто, Microsoft Installer перепроверяет все наши папки после того, как пользователь установил их во время последовательности установки, поэтому нам необходимо предотвратить любые изменения после того, как пользователь изменил его во время UI Sequence. Таким образом, Properties на помощь.

Вот пример, в UI установить сублимационной папки для каждой папки, которые вы хотите установить в InstallUISequence

<Property Id="SETFOLDERFREEZE">0</Property> 
<CustomAction Id="caSetPreventChanges" Property="SETFOLDERFREEZE" Value="1"/> 

Тогда в вашем Product вы связываете, что собственность.

<PropertyRef Id="SETFOLDERFREEZE"/> 
<SetDirectory Id="SPECIFIC_FOLDER" Value="[WindowsVolume]MoreStuff" Sequence="both"> 
    <![CDATA[SETFOLDERFREEZE<>"1"]]> 
</SetDirectory> 
<Property Id="EXTRAFILES_INSTALLDIR" Value="SPECIFIC_FOLDER"/> 

Вы используете PropertyEXTRAFILES_INSTALLDIR в вашем конкретном UI для этого проекта, и вы используете SPECIFIC_FOLDER в вашей многоразовой Library.

Это беспорядок, но позволяет повторно использовать и устанавливать некоторые простые свойства, а пользовательские действия превосходят настройку файлов и папок снова, особенно если их сотни.

Смежные вопросы