2016-07-28 15 views
1

Я создал установщик, который копирует config.ini и запрашивает у пользователя значения, которые затем вставляются в ini-файл. Это отлично работает во время обновления и крупных/мелких обновлений.WiX Installer удаляет значения файла конфигурации при ремонте

<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 для сохранения значений свойств, чтобы они были восстановлены в этих случаях технического обслуживания.