2012-01-02 8 views
0

Я использую следующий код,Как пропустить подкаталог на основе условия в WIX?

<Directory Id="dir2" Name="Folder"> 
    <Component Id="comp_one" Guid="{0D827414-5629-48A0-9DC1-9344C5C6EBFC}"> 
     <Condition>INSTALLSAMPLES</Condition> 
     <File Id="file_one" Source="..\..\..\fileone.exe" /> 
    </Component> 
</Directory> 

Приведенный выше код работает отлично и пропустить Folder, если условие ложно.

Но ниже код Folder и SubFolder созданы, если Condition является ложным. Есть ли решение пропустить каталог на основе условия?

<Directory Id="dir1" DiskId="3" Name="Folder"> 
    <Directory Id="dir2" Name="SubFolder"> 
     <Component Id="comp_one" Guid="{0D827414-5629-48A0-9DC1-9344C5C6EBFC}"> 
     <Condition>INSTALLSAMPLES</Condition> 
     <File Id="file_one" Source="..\..\..\fileone.exe" /> 
     </Component> 
    </Directory> 
</Directory> 

Пожалуйста, помогите мне решить эту проблему.

ответ

2

Я бы предложил из обширного опыта, что условия компонентов не очень хорошо масштабируются. Они действительно предназначены для таких вещей, как VersionNT и Not VersionNT, где, возможно, вам нужно установить одну DLL/EXE в Win 9X и другой взаимоисключающий файл на NT/2K/XP и др.

Вместо этого вы должны связать эти компоненты с функцией и позволить пользователю включать/отключать эту функцию с помощью диалогового окна «Пользовательская настройка». Более сложные абстракции могут быть сделаны с использованием функций Feature и/или AddLocal/Remove control events.

Тот факт, что вы использовали свойство под названием INSTALLSAMPLES, действительно говорит мне, что у вас должна быть функция под названием SAMPLES.

0

Его целевая папка является частью «идентичности» компонента MSI. Невозможно «плавать» один компонент среди нескольких целевых папок условно. Тем не менее, вы всегда можете определить больше, чем компонент, каждый из которых нацелен на другую папку, но получен из одного и того же файла, и условно установить тот или другой (или оба!).

Но мистер Художник знает, о чем идет речь (практически по любому вопросу установщика). Лучшая практика заключается в том, чтобы придать функции (коллекции компонентов), а не компоненты напрямую.

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