【问题标题】:Why does the MSI installer reconfigure if I delete a file?如果我删除文件,为什么 MSI 安装程序会重新配置?
【发布时间】:2011-05-12 16:30:28
【问题描述】:

我在 Visual Studio 2008 中创建了一个 MSI 安装程序包。问题是安装后,如果我删除任何已安装的文件。这不是我的安装程序包的预期行为。我的文件安装属性是:

PackageAs vsdpaDefault 永久错误 只读 False 注册 vsdrfDoNotRegister 系统错误 传递错误 重要错误

如果这是微不足道的,请原谅我。我不敢相信我无法让谷歌放弃答案。 :)

【问题讨论】:

    标签: wix windows-installer resiliency advertised-shortcut


    【解决方案1】:

    Windows Installer 是一种部署技术,它的工作是安装指定的文件和注册表设置并将它们保存在指定的安装位置并确保它们是正确的版本——自我修复或弹性是实现这一目标的一种机制。它的操作与开发人员为了调试、开发和测试而即时交换文件的需求相冲突。

    作为开发人员,您可能有兴趣部署 MSI,然后动态删除或替换文件以进行调试。在这些情况下,MSI 可能会令人讨厌,因为它永远不会停止工作,并且会重新安装正确的文件。这称为“自我修复”,可能会非常烦人! :-)。

    有很多方法可以解决这个问题,MSI 相当复杂。 由于“自我修复”通常是从"advertised shortcut" 调用的,因此避免此 MSI 功能的最简单方法是直接从文件系统启动 EXE 文件,而不是通过快捷方式。这绕过了除了最复杂的 EXE 文件之外的所有 MSI 自我修复机制。您还可以在桌面上手动创建一个不会触发自我修复的非广告快捷方式(右键单击并按住可执行文件,同时按住鼠标右键,拖放到桌面并在空白处释放按钮并点击“在此处创建快捷方式”)。

    记录自我修复由“self-repair entry points”触发,用于密钥路径验证。它们包括广告的快捷方式、文件关联、COM 注册表数据等。

    self-repair 或正式名称 resilency 的功能还有很多,请查看this comprehensive article on self-repair problems 以找到解决您特定问题的方法。文章很长,但如果你有自我修复的问题,应该值得一读。


    2018 年 10 月更新

    详细的自我修复:比任何人都想知道的关于自我修复的更多信息:

    1. Self-repair - explained
    2. Self-repair - finding real-world solutions
    3. Self-repair - how to avoid it in your own package

    链接

    【讨论】:

    • 请注意,还有许多其他方法可以避免触发修复。不建议使用其中的大多数,但在某些情况下使用“非广告快捷方式”是可以接受的,例如在为 QA 团队创建版本时。使用这种快捷方式不会触发自我修复。对于发布版本,我会启用广告快捷方式,因为自我修复是一项重要的 MSI 功能。
    【解决方案2】:

    这是设计使然,称为“弹性”:http://www.msifaq.com/a/1037.htm

    【讨论】:

      【解决方案3】:

      我知道我迟到了,但我发现将“NeverOverwrite="yes"' 添加到打算在安装后修改的文件的组件定义中会停止自我-修复撤消我的更改。

      这几乎解决了我的自我修复问题。我将此添加到 MSI 中的所有配置文件和批处理文件中。

      【讨论】:

      • 是的,但不要对您想要更新的文件(如二进制文件)执行此操作,否则您的设置在升级时将无法正确更新 - 显然。更好的是,在安装后复制设置文件并写入它们,将原始文件保留为未触及的“模板”。我不确定 REINSTALLMODE=amus (强制覆盖)是否会覆盖设置为“从不覆盖”的关键路径。我记得测试过它,但我不记得我发现了什么:-)。当你不写下来时,就会发生这种情况。感谢您分享您的提示!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2015-09-24
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      相关资源
      最近更新 更多