我正在使用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 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
另请阅读其他一些问题和来源: How to keep a config file when major upgrade in wix v3.8?
https://msdn.microsoft.com/library/aa371197.aspx
还有一些......
任何人都可以发现问题吗?
如有必要,我会在我的问题中添加任何其他相关数据。
感谢任何帮助!
答案 0 :(得分:2)
您还没准确说出问题所在,所以我假设配置文件正在被新升级安装中的配置文件替换。
您尝试利用的规则是:
https://msdn.microsoft.com/en-us/library/aa370531(v=vs.85).aspx
如果存在哈希检查,则存在相关规则,但日期规则仍然适用。
因此,您只需安排主要升级顺序为&#34;早期&#34;,例如在InstallInitialize之后。然后,根据文件替换规则,升级将安装在旧产品之上。旧的修改后的配置文件不会被替换。
如果这不起作用,那么可能这些文件(在旧产品中)在首次安装后没有更改,因此您可能只是安装另一个副本而没有丢失任何内容。使用详细日志进行升级并查找文件名,并查看有关覆盖的内容:
msiexec / i [msi文件的路径] / l * vx [文本日志文件的路径]