我正在尝试使用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>
有谁知道上述声明是否可行或者这永远不会起作用? 我可以将这种条件应用于组件吗?
RemoveFolderEx 与组件绑定,因此如果要删除该组件并且RemoveFolderEx/@On="uninstall",则RemoveFolderEx 将执行其操作。不支持添加另一个条件,但这似乎是合理的;请提交功能请求,以便将其列入待办事项列表中。
组件条件控制组件是否安装。安装时此条件为假,因此未安装该组件。当然,卸载时它不会被删除,因此删除操作不起作用。我会使用一个自定义操作来有条件地设置目标属性。
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
的组件是否将安装。