2013-11-21 39 views
1

我有这样的维克斯片段:下的应用数据,该程序存储数据如何在卸载过程中有条件地删除文件?

<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以更改行为的正确方法是什么?看来参数只是被忽略。

+0

您是否尝试将其设置为“#1”? – codemonkeh

回答

1

默认情况下,在卸载过程中不评估组件条件。这是一个类似Stackoverflow question与Rob Mensching的答案。他建议使用传递属性。 From documentation

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

+0

为''元素添加'Transitive ='yes''似乎没有任何区别 - 文件仍被无条件地删除。 –