【问题标题】:WIX: Prevent removing pre-existing files during uninstallWIX:防止在卸载过程中删除预先存在的文件
【发布时间】:2012-11-29 06:50:16
【问题描述】:

我正在编写的 WIX 安装程序需要在系统文件夹中安装几个操作系统文件。我正在为其编写此安装程序的程序是一个旧程序......可能有 10 年了。我不希望它替换用户机器上任何预先存在的操作系统文件。为了解决这个问题,我想我可以使用“NeverOverwrite="yes"

我的问题是在卸载过程中。我希望安装程序只卸载它添加的文件。我不希望它卸载用户已经拥有的任何预先存在的操作系统文件。

谢谢

【问题讨论】:

  • 安装程序应该只删除其已安装组件中的文件。安装程序是否正在删除系统上已经存在的文件?
  • 是的。这很奇怪。它正在做的另一件事......在我添加的一个组件上 NeverOverwrite="yes" Permanent="yes"。这按预期工作,它没有在卸载期间删除文件或在安装期间覆盖。但是,我删除了 Permanent="yes",再次构建了安装程序,即使我删除了该代码,它仍然没有在卸载过程中删除文件。我尝试清洁溶液并重建......仍然没有好处。我对代码所做的其他更改仍然出现
  • 您是否关注过详细日志?我会接受 BryanJ 的建议,将它们永久化,这样它们就不会被卸载。

标签: installation wix uninstallation wix3.6


【解决方案1】:

安装程序不应该删除它没有安装的文件(正如 Natalie 评论的那样),除非你特别告诉它。

也就是说,当我需要将文件直接安装到系统文件夹时,我会将它们标记为永久,因此它们永远不会被卸载。通常它是一个 Mircrosoft 控件或一些我没有单独的可再发行安装程序的操作系统文件,但如果我有的话我也不会卸载。

【讨论】:

  • 是的,我打算这样做。唯一的问题是它正在安装大约 70 个操作系统文件。我不希望它留下大量用户卸载时不需要的文件。我想永久是唯一的方法吗?
  • 就像 Natalie 建议的那样,你可以做一个详细的日志,看看到底发生了什么。不过我猜,你必须将它们标记为永久的。另一个需要研究的领域是在每个文件的组件上设置 SharedDllRefCount="yes"。如果通过设置该属性创建的注册表项不存在,这实际上可能对您的情况没有帮助,但它是一种跟踪共享文件的方法。不过我通常不喜欢这样做,因为注册表中的引用计数很容易被搞砸。
  • 好的,谢谢你们!我是 wix 的新手......我如何获得详细信息?我只是运行 msiexec.exe /i MyInstaller.msi /Lv* LogFile.txt 还是我需要做的其他事情
  • 没错,虽然你也可以添加'x'来获得额外的调试信息,例如:“/lvx* LogFile.txt”。出于习惯,我列出了所有内容“/lvoicewarmupx LogFile.txt”,但这是同一件事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2010-10-17
相关资源
最近更新 更多