【问题标题】:WiX: keep (rename) file on uninstallWiX:卸载时保留(重命名)文件
【发布时间】:2011-03-06 21:36:25
【问题描述】:

我的应用程序有一个设置文件,当用户卸载应用程序时我需要保留它。我可以使用组件执行此操作,还是需要使用自定义操作?

这是我目前所拥有的(不工作):

<Directory Id="INSTALLLOCATION" Name="_MyApp">
  <Component>
    <File KeyPath="yes" Source="$(var.Source)\settings.ini" />
  </Component>
  <Component Id="Backup" Guid="SOME-GUID">
    <Condition>REMOVE=ALL</Condition>
    <CopyFile Id="settings.ini" Delete="no" SourceProperty="INSTALLLOCATION" DestinationProperty="INSTALLLOCATION" SourceName="settings.ini" DestinationName="settings.ini.bak" />
  </Component>
</Directory>

如果重要的话,这些组件属于:

<Feature Id="Default" Level="1">
  <ComponentRef Id="settings.ini" />
  <ComponentRef Id="Backup" />
</Feature>

我怀疑这不起作用,因为动作 MoveFiles 在 RemoveFiles 之后运行,然后没有任何东西可以移动,所以我从安装程序中删除了 settings.ini 并在安装后手动复制它。我在想这种方式,在 RemoveFiles 之后ini文件仍然存在,它将被重命名。好吧,ini 文件确实在那里,但它没有被重命名。知道为什么吗?

【问题讨论】:

    标签: wix uninstallation


    【解决方案1】:

    Windows Installer 没有用于备份和恢复文件的内置机制。通常解决方案是使用复制文件的自定义操作。

    我从安装程序中删除了 settings.ini 并在之后手动复制 安装。我是这样想的 之后ini文件还在 RemoveFiles,它将被备份。 好吧,ini文件确实在那里,但是 它没有得到备份。

    尝试创建卸载日志,看看执行 MoveFiles 时会发生什么。附带说明一下,我看不出安装后手动复制文件比备份自定义操作更好。

    【讨论】:

    • Cosmin,感谢您的回复。我可能误用了“备份”这个词:它只意味着“创建该文件的副本”。我当然不打算在之后恢复它。我编辑了帖子以纠正误解。关于日志文件,我按照您的建议进行了操作,但 MoveFile 没有任何反应。可能是组件条件不对?
    • 是的,我错过了。条件应该是 REMOVE = “ALL”。否则,“ALL”字符串将被视为属性。处理属性时,所有字符串值都应该用引号引起来。
    • 谢谢,很高兴知道这一点。不幸的是,它在卸载时仍然没有做任何事情。我想知道组件条件是否在卸载时被评估...假设代码是正确的,可能不是。
    • 你能把卸载日志贴在某个地方让我们看看吗?
    • 组件条件仅用于确定是否应安装组件。他们不允许您在卸载时做额外的事情。
    猜你喜欢
    • 2011-05-08
    • 2011-02-07
    • 2010-09-16
    • 2011-11-23
    • 1970-01-01
    • 2019-06-14
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多