如何在卸载期间有条件地删除文件?

时间:2013-11-21 22:37:32

标签: wix wix2

我有这个WiX片段:

<Component Id="AppData" Guid="{30967EFB-4B86-4EBB-8486-5271D051082E}">
    <Condition>NOT KEEPAPPDATA</Condition>
    <RemoveFile Id="PurgeAppData" Name="*.*" On="uninstall" />
    <RemoveFolder Id="RemoveAppDataFolder" On="uninstall" />
</Component>

在程序存储数据的应用程序数据下的目录的相应<Directory>元素中。但无论如何

msiexec /xpath-to-msi.msi KEEPAPPDATA="TRUE"

msiexec /xpath-to-msi.msi

删除文件夹,因此条件不起作用。我也试过这个条件:

<Condition>KEEPAPPDATA == ""</Condition>

具有相同的结果。

将参数传递给msiexec以在卸载期间更改行为的正确方法是什么?似乎参数被忽略了。

1 个答案:

答案 0 :(得分:1)

默认情况下,卸载期间不评估组件条件。这是一个类似Stackoverflow question的回答,来自Rob Mensching。他建议使用Transitive属性。来自documentation

  

如果此属性设置为“yes”,则安装程序会在重新安装时重新评估条件中语句的值。如果该值以前为False且已更改为True,则安装程序将安装该组件。如果该值以前为True且已更改为False,则即使该组件具有其他产品作为客户端,安装程序也会删除该组件。