您可能没有使用 WiX,但在我注意到您没有将 WiX 添加为标签之前,我将添加我所写的内容。必须学会阅读。
这可能是 MSI / WiX 部署中最常见的问题,以及在主要升级期间清除配置设置。我假设您在安装期间已将 app.config 文件设置为永久文件,以便在重大升级期间保留它?
可能发生的情况是您已将配置文件安装为文件,但它应该安装为一堆 XML 配置设置,可以合并到目标文件中。
The MSI file versioning rules 尝试保留安装后已修改的非版本控制文件。因此,如果文件的创建和修改日期在升级时不同,则不会覆盖非版本化文件。如果没有最新的所需值,您的文件将显示为原样。它已被“保存”。
您可以更新您的 WiX 源以使用适当的 WiX XML 元素设置所需的值。有两个不同的元素是相关的:
关于这两个元素之间的差异,我引用 Bob Arnson(WiX 开发人员):“您可以使用 XmlConfig 执行 XmlFile 支持的所有(以及更多)操作,但它需要额外的使用 XmlFile 进行创作不是必需的。
XmlFile 最擅长修改您正在安装的 XML 文件(例如,添加反映文件安装路径的属性);它无法在卸载时删除修改,但如果您的安装程序安装了该文件,它将被卸载。 XmlConfig 最擅长修改共享的 XML 文件,因为它支持卸载修改。" (source)。
我发现这些 XML 内容非常繁琐,而且我可能不会使用最新最好的技术,但这里有一个快速示例。彻底测试——尤其是卸载和升级场景——我所做的有限测试:
这是我的测试 XML 文件(实际上是作为文件安装然后更新的)。请检查您保存的文件的编码 - some issues with encoding have been reported - 不确定当前状态是什么:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<ExistingConfig>
<bindingRedirect oldVersion="0.0.0" newVersion="0.0.0" />
</ExistingConfig>
</configuration>
这是将更新文件(并安装文件)的 WiX sn-p。将上述 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>
我希望这有某种意义。就像我说的,我发现这有时很繁琐且容易出错,但其他用于此类更新的工具也是如此。请记住首先尝试使用原始测试用例并进行测试安装以测试运行时错误。做一些可行的小东西,然后在其上进行构建——这显然是不言而喻的,但一次尝试所有这些是很诱人的。 “洞里开火,寻找掩护!”。
一些安全链接: