我正在使用 WiX 3.8(我认为是最新的稳定版本),我似乎无法在重大升级期间获得不会卸载并重新安装的配置文件。
SO上有很多关于这个的问题——很多答案都指向这个网站作为一个很好的答案。但是,给出的建议不起作用(对我来说)。
该网站所说的是将每个配置文件放在自己的组件中,并将文件标记为组件的关键路径。像这样的东西:
<Component Id="config.xml"
Guid="*"
Directory="folder_where_config_file_lives">
<File Id="config_file"
Source="$(var.Project.ProjectDir)bin\Release\configFile.xml"
KeyPath="yes"/>
</Component>
伟大的。接下来它说在InstallFiles操作之后安排RemoveExistingProduct,如下所示:
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFiles"/>
</InstallExecuteSequence>
问题是,当我编译时,我得到这个错误:
InstallExecuteSequence 表包含在两个不同位置声明的操作“RemoveExistingProducts”。请删除其中一项操作或在其中一个元素上设置 Overridable='yes' 属性。
这个人也有这个问题,但他似乎已经解决了。为他解决的问题是在 中添加了一个调度属性,这有效地摆脱了“两个不同的位置”声明问题(我猜):
<MajorUpgrade Schedule="afterInstallInitialize"
DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
所以当我替换计划更改属性(其中包含一个属性本身,我猜),它不仅不起作用——配置文件在升级过程中被删除和替换——它会导致更多的怪异。我的项目有一个带有很多 MSI 的引导程序,虽然我获得了用于安装包含配置文件的 MSI 之后的所有 MSI 的日志文件,但它们并没有安装。
让我重复一遍:日志说安装了 MSI,但没有安装。我在日志文件中找不到的某个地方可能存在回滚,但是阅读 MSI 日志文件时,安装看起来很顺利。
有谁知道在 Wix 3.8 的主要升级期间不删除和重新安装配置文件的方法?我上面提到的是我能从互联网上找到的最好的信息,但是我在 SO 上尝试了几乎所有的东西都无济于事。