您可能没有使用 WiX,但我会添加我在注意到您没有添加 WiX 作为标签之前所写的内容。必须学会读书。
这可能是 MSI / WiX 部署中最常见的问题,以及主要升级期间配置设置被删除的问题。我假设你已经设置了应用程序配置在安装过程中永久保存文件以在主要升级期间保留它?
可能发生的情况是,您已将配置文件安装为文件,但它应该安装为一堆可以合并到目标文件中的 XML 配置设置。
MSI 文件版本控制规则尝试保留安装后已修改的非版本化文件。因此,如果升级时文件的创建日期和修改日期不同,则不会覆盖非版本化文件。您的文件将显示为未受影响,没有最新的所需值。它已被“保存”。
您可以更新 WiX 源以使用适当的 WiX XML 元素设置所需的值。有两个不同的相关元素:
关于这两个元素之间的差异,我引用鲍勃·阿恩森(WiX 开发人员):“您可以使用 XmlConfig 执行 XmlFile 支持的所有操作(以及更多操作),但它需要额外的创作,而 XmlFile 则不需要这些操作。
XmlFile 最擅长修改正在安装的 XML 文件(例如,添加反映文件安装路径的属性);它无法在卸载时删除修改,但如果您的安装程序安装了该文件,它无论如何都会被卸载。 XmlConfig 最擅长修改共享 XML 文件,因为它支持卸载修改。" (source).
我发现这个 XML 东西非常繁琐,而且我可能不会使用最新和最好的技术,但这里有一个快速示例。彻底测试 - 特别是卸载和升级场景 - 我进行的有限测试:
这是我的测试 XML 文件(实际上作为文件安装然后更新)。请检查您保存的文件的编码 -已报告一些编码问题- 不确定当前状态是什么:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<ExistingConfig>
<bindingRedirect oldVersion="0.0.0" newVersion="0.0.0" />
</ExistingConfig>
</configuration>
这是将更新文件(并安装文件)的 WiX 片段。将上述 XML 测试文件放在 WXS 源文件旁边,或者在构建 MSI 之前指定正确的源路径。
<Component Feature='ProductFeature'>
<!--Installs the base file-->
<File Source='app.config' />
<!--Create New Element-->
<util:XmlFile Id='XmlSettings1' File='[#app.config]' Action='createElement'
Name='MyConfig' ElementPath='//configuration' Sequence='1' />
<!--Set New Value-->
<util:XmlFile Id='XmlSettings2' File='[#app.config]' Action='setValue'
Name='newVersion' Value='6.6.8' ElementPath='//configuration/MyConfig' Sequence='2' />
<!--Set New Value-->
<util:XmlFile Id='XmlSettings3' File='[#app.config]' Action='setValue'
Name='Server' Value='Pusevov' ElementPath='//configuration/MyConfig' Sequence='3' />
<!--Update Existing Value, Existing Element-->
<util:XmlFile Id='XmlSettings4' File='[#app.config]'
Action='setValue' Name='newVersion' Value='7.7.7' ElementPath='//configuration/ExistingConfig/bindingRedirect' Sequence='4' />
</Component>
我希望这是有道理的。就像我说的,我有时发现这很繁琐且容易出错,但用于此类更新的其他工具也是如此。请记住首先尝试使用原始测试用例并进行测试安装以测试运行时错误。制作一些可行的小东西,然后在其基础上进行构建——这显然是不言而喻的,但一次性尝试所有这些都是很诱人的。 “洞里有火,寻找掩护!”。
一些保管链接:
- Firegiant XML 教程
- 使用 XPath 在 WIX 中删除具有 XmlConfig 扩展的 XML 元素
- WIX util:xmlfile 文件名是 Source 属性
-
WIX v3 和 XmlConfig / XmlFile 故障排除(从时光机复活)
- 关于 WiX 和 XML 的分步博客
- 如何强制 wix 在升级操作之前更新文件
- 在基于 WiX 的安装期间获取配置文件的应用程序设置