【问题标题】:Update and retain web.config file during upgrade in wix installer在 wix 安装程序中升级期间更新并保留 web.config 文件
【发布时间】:2018-08-14 01:07:49
【问题描述】:

主要升级期间处理web.config文件的标准方法是什么。我知道升级期间如何处理未版本化的文件,如果文件已被用户修改,该文件将不会被替换。

有没有办法处理在配置文件中添加了新条目与需要安装的最新安装程序捆绑在一起的情况,并且还保留了用户在 Wix 主要升级期间修改的现有条目。

【问题讨论】:

  • 您如何对 RemoveExistingProducts 进行排序?见msdn.microsoft.com/en-us/library/…。还有很多关于这个主题的好帖子,例如stackoverflow.com/questions/2441651/…
  • MSI 是在 XML 文件之前的 90 年代设计的。这是默认文件版本控制规则的根本缺失,因为 XML 文件不仅仅是一个文件,它们就像一个完整的注册表配置单元。您必须使您的应用程序数据和配置数据保持不同,以便非常清楚安装程序应该和不应该覆盖的内容。我通常会将此作为新客户录取的一部分进行讨论。赢得这场比赛的最好方法就是不参加比赛。

标签: wix windows-installer wix3.10 major-upgrade


【解决方案1】:

我知道这个问题是针对 Wix 的,但我只是想指出商业工具在这种情况下可以节省多少时间。

例如,使用高级安装程序,您可以read and load into an MSI property any XML values,然后在安装(升级)时使用XML Files updater 在文件中写入动态内容。 (查看每篇文章末尾的视频以获得更快的概览

免责声明:我在团队建设 Advanced Installer 工作。

【讨论】:

    【解决方案2】:

    我的很多客户都喜欢的简单解决方案是不将用户数据放入 web.config。相反,我们使用 AppSettings@file 和 ConnectionStrings@ConfigSource 元素来指定覆盖文件并将用户数据保存在那里。 MSI 不知道的东西不会被篡改。现在您不必成为 MSI 组件规则向导。

    https://msdn.microsoft.com/en-us/library/ms228154(v=vs.85).aspx

    https://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource(v=vs.100).aspx

    【讨论】:

    • 听起来很有趣。我从来没有看过那个。还有一件事要写下来阅读和测试。
    【解决方案3】:

    似乎唯一可行的方法是将新文件中的条目合并到现有文件中的自定义操作,因为您需要来自现有新文件的数据。您还需要将升级安排在较晚的时间(在 InstallExecute 之后),这样升级就不是卸载旧产品,然后安装新产品。

    如果您正在进行升级(WIX_UPGRADE_DETECTED 属性将由 MajorUpgrade 元素设置),请更新现有文件,否则安装新文件。

    可能有一种方法可以将更新表示为 Xml 转换,因此 WiX util:xml 工具中的某些内容可能有助于进行更新。

    【讨论】:

    • 它只是无法扩展。 MSI 必须了解 v1 基础 XML 才能计算转换,然后在安装后将其应用于 v2 基础 XML。一场真正的噩梦。最简单的解决方案是不要让用户修改安装程序拥有的文件。将该数据存储在安装程序不知道的文件中。
    【解决方案4】:

    将组件设置为始终覆盖并编写自定义操作以将所需信息添加到配置文件中。

    【讨论】:

    • 如何适应安装后用户定义的设置?
    • 用户定义的设置可以提示输入或从以前的配置文件中读取,然后存储在属性中。由于您在 InstallFinalize 之后,因此您必须存储它们以便它们在外部可用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多