如何在wix v3.8中进行重大升级时保留配置文件?

zho*_*ang 13 wix upgrade preserve

我想在msi安装程序进行重大升级时保留配置文件.对于配置文件,我在安装时进行了更改.代码如下:

<Component Id="MODIFYCONFIG" Guid="6A1D7762-B707-4084-A01F-6F936CC159CE" Win64="yes">
    <File Id="Application.config" Name="Application.config" Vital="yes" KeyPath="yes" Source="Resource\Application.config"></File>
    <util:XmlFile Id="SetValueIP" Action="setValue" Permanent="yes" File="[#Application.config]"
         ElementPath="/configuration/applicationSettings/Application.Properties.Settings/setting[\[]@name='IpAddress'[\]]/value"  Value="[IPADDRESS]" Sequence="1"/>
    <util:XmlFile Id="SetValuePort" Action="setValue" Permanent="yes" File="[#Application.config]"
         ElementPath="/configuration/applicationSettings/Application.Properties.Settings/setting[\[]@name='IpPort'[\]]/value"  Value="[PORT]" Sequence="2"/>
    <Condition>Not Installed</Condition>
  </Component>
  <Component Id="KEEPCONFIG" Guid="F7F173AA-C2FD-4017-BFBC-B81852A671E7" Win64="yes">
    <RemoveFile Id="ApplicationConfig" Name="Application.config" On="uninstall"/>
    <Condition>(REMOVE=ALL) AND (NOT UPGRADINGPRODUCTCODE)</Condition>
  </Component>
Run Code Online (Sandbox Code Playgroud)

但是,当发生重大升级时,不会保留文件.如何保留修改后的文件?

jme*_*hus 13

这为我解决了...配置文件保留了次要/主要升级,并在卸载时完全删除.

参考:http://blogs.msdn.com/b/astebner/archive/2008/10/19/9006538.aspx

编辑:链接页面的摘要信息...

  1. 每个配置文件都应该有自己的组件,其中配置文件被标记为组件的键路径.Windows Installer将使用无版本文件替换逻辑.
  2. 在"InstallFiles"操作后添加"RemoveExistingProducts"操作.在删除旧MSI之前,将安装所有组件的新版本.按此顺序完成后,组件的引用计数将增加到2,但配置文件将不会被替换,除非它们未经修改(因为未版本控制的文件替换逻辑).删除旧的MSI后,引用计数将减少回1,但由于引用计数不为0,因此不会删除文件.


cav*_*ick 9

升级时有3个选项:

  1. 使配置文件组件永久化.这不会卸载它,你将能够升级它,但删除它将非常困难.
  2. 使用" 记住"属性模式在注册表中存储IP和PORT的配置设置.
  3. 作为安装的一部分,将配置文件写入临时文件名,然后使用CopyFile命令创建目标文件.在使用FileSearch升级检查文件时,如果存在,则不要复制.这里唯一的问题是如果配置文件已更改,您将无法获得更新的部分.

最好的选择是记住我的财产,因为这是最少的问题.