【问题标题】:How do you conditionally remove files during uninstall?在卸载过程中如何有条件地删除文件?
【发布时间】:2013-11-21 22:37:31
【问题描述】:

我有这个 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>

在适当的&lt;Directory&gt; 元素中,用于程序存储数据的应用程序数据下的目录。然而两者都

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

msiexec /xpath-to-msi.msi

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

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

结果相同。

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

【问题讨论】:

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

标签: wix wix2


【解决方案1】:

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

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

【讨论】:

  • Transitive="yes" 添加到 &lt;Component&gt; 元素似乎没有任何区别 - 文件仍在无条件删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多