Wix:我可以对RemoveFolderEx 元素施加一个条件,使其仅在卸载程序时运行吗?

问题描述 投票:0回答:3

我正在尝试使用RemoveFolderEx删除文件夹层次结构,但仅限于卸载软件时。 目前,当我重新安装时,它也会删除所有文件夹,从而删除所有程序创建的不需要的内容。这可能是因为我设置了软件先卸载再重新安装

<InstallExecuteSequence>
    <RemoveExistingProducts Before="InstallInitialize" />      
</InstallExecuteSequence>

是否可以对以下元素施加条件? 我应该将它包装在它自己的组件中然后在里面添加一个条件吗? 到目前为止我还没能让它工作。

<util:RemoveFolderEx On="uninstall" Property="MAINDIR" ></util:RemoveFolderEx>

从另一个问题我知道条件必须是

((NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL"))

但我并不完全了解如何将其应用到删除文件夹元素(如果可能的话)。

我想我可以在自定义操作中将文件夹的路径设置为空,该操作受条件限制,但这看起来很hacky。

干杯。 尼尔


编辑:我几乎通过将removefolderex放入其自己的组件中来完成这项工作。 如果没有这种情况,它会按预期工作,并在卸载和重新安装时删除数据目录。 当我添加条件时,它不会运行,但我希望这是由于条件错误所致。

<DirectoryRef Id="DATADIR">        
    <Component Id="C.RemoveDataFolder" Guid="myguid" KeyPath="yes">
        <util:RemoveFolderEx On="uninstall" Property="DATADIR" ></util:RemoveFolderEx>
        <Condition>(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Condition>
    </Component>
</DirectoryRef>

有谁知道上述声明是否可行或者这永远不会起作用? 我可以将这种条件应用于组件吗?

wix windows-installer
3个回答
4
投票

RemoveFolderEx 与组件绑定,因此如果要删除该组件并且RemoveFolderEx/@On="uninstall",则RemoveFolderEx 将执行其操作。不支持添加另一个条件,但这似乎是合理的;请提交功能请求,以便将其列入待办事项列表中。


0
投票

组件条件控制组件是否安装。安装时此条件为假,因此未安装该组件。当然,卸载时它不会被删除,因此删除操作不起作用。我会使用一个自定义操作来有条件地设置目标属性。


0
投票

WiX v4

Condition
属性添加到
RemoveFolderEx
:

<DirectoryRef Id="DATADIR">        
    <Component Id="C.RemoveDataFolder" Guid="myguid" KeyPath="yes">
        <util:RemoveFolderEx 
            Property="DATADIR" 
            Condition='(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")' />
    </Component>
</DirectoryRef>

组件条件应删除,因为它仅控制包含

RemoveFolderEx
的组件是否将安装

© www.soinside.com 2019 - 2024. All rights reserved.