【问题标题】:Configuration files and Wix Toolset配置文件和 Wix 工具集
【发布时间】:2015-06-16 17:47:25
【问题描述】:

我有一个应用程序的 WiX 安装程序,它同时安装一个 INI 文件和一个 XML 文件(两者都是配置文件)。

因此将它们作为安装的一部分并不是一个很好的举措,所以现在我已经修改了安装,以便安装的文件是默认文件(.default),我运行一个元素来复制到真正的配置文件.这里的问题是,文件在卸载/升级期间被删除。

所以我有一个自定义操作,将默认文件复制到“真实”配置文件,这意味着卸载时它们将被保留。这只在之后才有效(因为在那之前,文件还没有被放下)

问题是,用户可以在安装过程中使用向导对话框页面和静默安装参数来配置应用程序。而当或运行时,文件还没有被复制!

理想的全新安装顺序是:

  • 已设置默认配置 INI/XML 文件
  • “真实”配置文件是从原始文件复制而来的
  • UI/silent 上的 INI 值和 XML 修改是针对“真实”配置文件进行的

然后升级

  • 新的默认配置 INI/XML 文件已设置
  • 对“真实”配置文件进行 INI 值和 XML 修改

然后卸载

  • 应用程序文件和默认文件已删除
  • “真正的”INI/XML 配置文件不理会,抑制 INI/XML 回滚

这应该是什么模式?

我试图让场景尽可能简单地描述。我觉得为此存在/应该存在设计模式。

在安装中允许将配置参数写入文件而不是(严格)安装的一部分的首选模式是什么?

【问题讨论】:

  • (只是一个快速响应)如果可能的话,我会说将用户所做的任何选择写入注册表中的某个地方。然后,当应用程序首次启动时,它可以读取注册表并填充用户数据配置文件。这样,用户的安装时间选择对于修复/修改/升级安装保持不变,并且安装程序不必担心从发布到发布保持最新的配置文件模式。如果可能的话,最好让安装程序远离管理/持久化用户数据的业务......
  • @jbudreau 给出了很好的建议 - 让安装程序处理默认文件,让应用程序本身执行用户级设置。当您的应用程序由计算机上的第二个(管理员)帐户安装时,这一点变得尤为重要。
  • 所以安装程序不应该问任何问题,除了“什么目录?”
  • 使用“从不”这个词可能很棘手,但通常是的。我真的尽量让安装程序尽可能简单和可靠。

标签: xml installation wix windows-installer


【解决方案1】:

这是一个非常广泛的主题,但总的来说,我的最佳实践方法是安装程序只设置默认值并始终覆盖文件。然后覆盖文件用于提供自定义,并按该顺序加载应用程序。安装程序不知道这些文件,因此它从不接触它们。必须设计应用程序来执行此操作,在某些情况下这是不可能的(以 web.config 为例)。在这些情况下,您必须完成加载您关心的自定义项、覆盖文件然后重新应用它们的额外工作。

这个问题的核心是 INI 和 XML 文件可能是无限的数据存储库,MSI 的简单“覆盖或不覆盖”服务规则根本不起作用。你最终会遇到一个无法解决的合并问题。最好有 1 个安装程序“拥有”并始终覆盖的文件,以及用户或应用程序拥有的一个或多个其他文件(层),安装程序对此一无所知且从不修改,然后让应用程序将数据合并在一起以产生最终的真相。

如果您想更详细地讨论或解释原因,请查看我的联系信息。我总是愿意毫无义务地讨论设计问题。

【讨论】:

  • 这听起来确实是一个很好的工作理想:应用程序处理它自己的配置,否则有合理的默认值。但这就像 app/web.config 的情况。 (就像程序甚至需要开始加载的连接字符串)。我想另一种方法是制作一个在安装完成时运行的整个配置实用程序/向导。这与安装人员问几个简单的问题并没有什么不同。
  • 在这种情况下,它会变得非常棘手。它通常采用自定义操作来检索值,然后覆盖文件并使用另一个自定义操作来应用转换以将值放回原处。通过这种方式,安装程序和应用程序的真实来源重新合并在一起。非常丑陋,最好尽可能避免。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多