Wix: можно ли вручную запустить элемент RemoveFolderEx из настраиваемого действия? - PullRequest
5 голосов
/ 25 ноября 2011

Мне интересно, возможно ли вручную запустить элемент RemoveFolderEx из настраиваемого действия.Наверное, нет, но кто-то может знать способ, которого я не знаю.

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

Я пробовал это с помощью этого метода Wix: условие для свойства не работает однако оно не работало и все еще работало при выполнении переустановки.

Единственное, о чем я могу думать, - это возможность вручную отключить RemoveFolderEx из настраиваемого действия, которое, как я знаю, выполняется в правильной точке и только при истинном удалении.Возможно, мое пользовательское действие могло бы использовать d ++ c ++, а затем вручную добавить команду в интерфейс MSI, но если я зайду так далеко, то вполне возможно, что я сам полностью напишу логику удаления.

Спасибо.Нил


РЕДАКТИРОВАТЬ: я наконец-то получил эту работу, вот несколько примеров wix, чтобы показать, что я сделал.

<Property Id='P.REMOVEDATAFOLDER' Secure='yes' />

<DirectoryRef Id="DATADIR">        
    <Component Id="C.RemoveDataFolder" Guid="myguid" KeyPath="yes">
        <util:RemoveFolderEx On="uninstall" Property="P.REMOVEDATAFOLDER" />
    </Component>
</DirectoryRef>

<CustomAction Id="CA.SetDataFolder" Property="P.REMOVEDATAFOLDER" Value='[DATADIR]' />

<InstallExecuteSequence>           
    <Custom Action="CA.SetDataFolder" Before="ValidateProductID" >(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
</InstallExecuteSequence>    

Свойство P.REMOVEDATAFOLDER только устанавливается при истинном удалении сразу после чтения DATADIR из реестра, но до действия CostInitialize.

Ответы [ 2 ]

5 голосов
/ 25 ноября 2011

Я бы использовал следующий подход.Не выполняйте условия операции RemoveFolderEx, но используйте условное настраиваемое действие, чтобы установить соответствующее значение для целевого свойства.

0 голосов
/ 25 ноября 2011

Принимая несколько советов от этого вопроса , условие, которое обозначает удаление: REMOVE="All" AND NOT UPGRADINGPRODUCTCODE.

Что-то подобное может работать:

<Component Id="RemoveMyFolder">
  <Condition> REMOVE="All" AND NOT UPGRADINGPRODUCTCODE </Condition>
  <RemoveFolderEx ... />
</Component>
...