1

我正在使用 Wix 为我的安装创建一个 .msi。当 msi 安装程序进行重大升级时,我想保留一个配置文件。

这是我的 Product.wxs 文件中的相关部分:我的升级属性:

<MajorUpgrade      
  Schedule="afterInstallInitialize"
  DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

根据我的理解,应该阻止删除我的配置文件的组件:

<DirectoryRef Id="INSTALLFOLDER">
  <Directory Id="Content" Name="Content">
  <Component Id="Config" Guid="432FF769-1011-47CF-BFFD-0BF780768C45">      
    <File Source="$(var.MO.Packing.Wpf.TargetDir)\Content\StationConfig.xml" Name ="StationConfig.xml"
      Id="config" KeyPath="yes" />
  </Component>
 </Directory>
</DirectoryRef>

添加我的 Feature 属性以防它是相关的:

<Feature Id="MainApplication" Title="Main Application" Level="1">
  <ComponentRef Id="myapplication.exe" />
  ...
  <ComponentRef Id="Config" />
  ...
</Feature>

在创建这个逻辑时,我遵循了这个指南:http: //blogs.msdn.com/b/astebner/archive/2008/10/19/9006538.aspx

另请阅读其他一些问题和资料: wix v3.8 中的主要升级时如何保留配置文件?

https://msdn.microsoft.com/library/aa371197.aspx

还有一些……

任何人都可以识别问题吗?

如有必要,我会在我的问题中添加任何其他相关数据。

任何帮助表示赞赏!

4

1 回答 1

2

您还没有确切地说出问题所在,所以我假设配置文件正在被新升级安装中的配置文件替换。

您试图利用的规则是:

https://msdn.microsoft.com/en-us/library/aa370531(v=vs.85).aspx

如果有哈希检查,则有相关规则,但日期规则仍然适用。

因此,您只需将 Major Upgrade 排序安排在“早期”,例如在 InstallInitialize 之后。然后升级安装在旧产品之上,遵循文件替换规则。旧的修改配置文件不会被替换。

如果这不起作用,那么文件(在旧产品中)可能在首次安装后没有更改,所以您可能只是安装了另一个副本,没有任何丢失。使用详细日志进行升级并查找文件名并查看有关覆盖的内容:

msiexec /i [msi 文件的路径] /l*vx [文本日志文件的路径]

于 2015-11-10T18:49:08.030 回答