2016-07-28 85 views
1

我已经创建了一个安装程序,该安装程序会复制config.ini并向用户询问插入到ini文件中的值。这在全新安装和主要/次要升级期间都可以正常工作。WiX安装程序在修复时删除配置文件值

<Component Id="ConfigIni" Guid="GUID-GOES-HERE" DiskId="1"> 
    <File Id="ConfigIniFile" 
      Name="config.ini" 
      Source="../../artefacts/etc/template-config.ini" 
      KeyPath="yes"/> 
    <IniFile Id="ValueOne" 
      Action="addLine" 
      Directory="ETC" 
      Section="sectionone" 
      Name="config.ini" 
      Key="valueone" 
      Value="[VALUEONEPROPERTY]" /> 
    <IniFile Id="ValueTwo" 
      Action="addLine" 
      Directory="ETC" 
      Section="sectiontwo" 
      Name="config.ini" 
      Key="valuetwo" 
      Value="[VALUETWOPROPERTY]" /> 
</Component> 

但是,如果用户试图安装已安装的产品的相同版本,安装程序将进入修复模式。我不确定修复模式是如何工作的,但是在config.ini文件中,它似乎正在删除带有填充值的文件,再次复制它,并且由于它是修复,因此没有任何用户值来填充config.ini文件,所以文件是空白的。

有什么办法让安装程序在修复时忽略此文件,或获取原始用户值?

+0

可能的[WIX。如何在修复期间不重新安装功能?](http://stackoverflow.com/questions/28816058/wix-how-to-not-reinstall-a-feature-during-repair) – Vanita

+0

也许不是重复。与此相比,您链接的问题似乎相当混乱。 – Wolf

回答

2

基本问题是属性值没有被保存。没有魔法可以自动保存安装和修复之间的属性值(或添加新的功能等)。问题不在于文件被替换,因为Windows不会替换已用用户数据修改过的文件。

在WiX中,使用"remember property" pattern来保存属性的值,以便在这些维护情况下恢复它们。

相关问题