Wix: установка компонента во время ремонта или переустановки

Проблема:
У меня есть пользовательское требование, в котором файл не будет установлен, если на компьютере пользователя отсутствует необходимое приложение. Но после установки моего продукта, когда пользователь устанавливал это предварительное приложение, он запускал мой установщик и выбирал восстановление, чтобы установить этот отсутствующий файл и связанные с ним записи реестра.

Мои ожидания:
Я знаю, что Repair восстановит только те файлы, которые уже были установлены при первой установке. Но нет ли обходного пути по этому поводу???

Что-нибудь тут и там с AddLocal???


person Farrukh Waheed    schedule 09.02.2012    source источник


Ответы (3)


Вы можете использовать условие внутри тега компонента. Пример:

<Component Id="RepairOrReinstallOnly" Guid="YourGUID" Transitive="yes">
    <Condition>
        INSTALLED AND (NOT UPGRADINGPRODUCTCODE)
    </Condition>
    ...
</Component>

Таким образом, компонент следует устанавливать только при ремонте, модификации и переустановке.

Но он не будет установлен при первой установке (INSTALLED — false) или при серьезном обновлении (UPGRADINGPRODUCTCODE — true).

person Chris    schedule 09.02.2012

Я не думаю, что это возможно, потому что, когда установщик Windows кэширует ваш .msi, файлы .cab удаляются. Это означает, что исходные файлы, которые изначально были пропущены, будут недоступны, если пользователь не сохранил исходный установщик. Это немного натянуто, чтобы сделать такое предположение.

Мое предложение состояло бы в том, чтобы либо всегда устанавливать файл, либо попытаться сделать так, чтобы ваше приложение управляло развертыванием необязательных файлов. Я обнаружил, что каждый раз, когда вы пытаетесь сделать нестандартные вещи в установщике, становится намного сложнее управлять, и гораздо труднее предотвратить появление мелких проблем.

person Dave Andersen    schedule 09.02.2012

Итак, у вас есть приложение, содержащее 2 программы. Когда мы запускаем установщик, он устанавливает только программу 1 и не устанавливает программу 2, потому что необходимая программа не установлена.

Теперь, когда вы устанавливаете предварительную программу и хотите, чтобы программа 2 не была установлена, она должна быть установлена ​​при повторном запуске вашего установщика.

В установщике есть 3 варианта. Добавить/удалить функцию, восстановить и удалить. Вы можете перейти к функции «Добавить/удалить», выбрать программу 2 и установить ее.

Вам нужно сделать условия на установщике, что если pre-req не установлен, программа 2 не может быть установлена. Поэтому, когда вы пытаетесь установить в первый раз и выбираете программу 2 или полную установку, вам будет сказано, что вы не можете установить это, поскольку там нет предварительного требования. Будет установлена ​​только программа 1. И при повторном запуске установки будет отображаться опция «Добавить/удалить функцию».

person fhnaseer    schedule 09.02.2012