В настоящее время я делаю это с помощью комбинации настраиваемого действия и XmlConfig.
Настраиваемое действие запускается после CostFinalize и считывает текущие значения из файлов конфигурации и сохраняет их в общедоступных свойствах.
string configFile = Path.Combine(session["INSTALLLOCATION"], "app.exe.config");
ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = configFile;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
session["OLD_PRESERVEDVALUE"] = config.AppSettings.Settings["PreservedValue"].Value;
то у меня есть запись XmlConfig, как показано ниже, которая устанавливает сохраненные значения из общедоступных свойств:
<Component Id="RestoreOldPreservedValue" Guid="<GUID>" >
<Condition>OLD_PRESERVEDVALUE</Condition>
<CreateFolder/>
<util:XmlConfig
Id='RestoreOldPreservedValue'
Action='create'
On='install'
Node='value'
ElementPath='/configuration/applicationSettings/app.Properties.Settings/setting[\[]@name="PreservedValue"[\]]/value'
File='[#app.exe.config]'
Value='[OLD_PRESERVEDVALUE]'>
</util:XmlConfig>
</Component>
Моя следующая итерация будет заключаться в том, чтобы настраиваемое действие напрямую создавало записи в таблице XmlConfig.
Конечным решением будет расширение WiX, которое заполняет настраиваемую таблицу и планирует настраиваемое действие, которое сохраняет значения для сохранения после CostFinalize, а затем другое настраиваемое действие, которое восстанавливает значения после того, как новый файл (-ы) конфигурации был скопирован с помощью установщик.
person
wta
schedule
27.05.2014