Установка обновления: как сохранить app.config? - PullRequest
1 голос
/ 07 сентября 2011

У меня огромная проблема:

У меня есть старое приложение App1.0.exe.В этом приложении есть файл App1.0.exe.config (конфигурация приложения).Теперь я сделал версию 2.0, с новой версией теперь есть разные настройки приложений в Appconfig.Мой вопрос: как я могу сохранить старый Appconfig при установке обновления?

Попытка решить проблему не удалась:

-Считать старую конфигурацию с событием BeforeInstall, сохранить впараметры контекста и записать в новый конфиг в событии Afterinstall.- BeforeInstall считывает новый конфиг (старый удаляется).-Не копируйте новый Appconfig, но копируйте файл с другим именем, например, AppConfigUpdate.config, который включает новый appconfig.В событии после установки я сохраняю старую конфигурацию с помощью File.Move ().Теперь у вас есть:

-Appconfig.exe.config_Original

-AppconfigUpdate.config

После того, как я прочитал .config_Original и записал параметр в AppConfigUpdate.config и переименовалэто для Appconfig.exe.config

Моя проблема заключается в том, что в msi есть стандартное действие, которое выполняется после выполнения моих пользовательских действий, называемое: RemoveExistingProducts.Так что теперь, когда я отлаживаю установщик, который, как я вижу, в конце моей привычки, есть старая конфигурация .config_original и новая конфигурация .config с правильными параметрами из старой конфигурации.Но после моего пользовательского действия при установке удалите .config, и останется только .config_original.

Я думаю, что RemoveExistingProducts удаляет все файлы, которые не были доставлены с пакетом обновления.Но я не могу доставить .config, потому что он перезаписывает исходную конфигурацию и все параметры теряются.

Сейчас я работаю над этой проблемой более 3 дней, и мне действительно нужна ваша помощь.У меня заканчиваются идеи, как решить эту проблему, может, у кого-нибудь из вас была похожая проблема?

Извините за мой плохой английский.С наилучшими пожеланиями

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

Правильный подход заключается в использовании двух пользовательских действий для резервного копирования и восстановления старого файла конфигурации. Настраиваемое действие резервного копирования будет выполнено перед действием RemoveExistingProducts. Пользовательское действие восстановления будет выполнено после InstallFiles. Некоторое простое пользовательское действие скрипта сделает эту работу.

Подробнее о пользовательских действиях см .:

http://msdn.microsoft.com/en-us/library/aa368066(VS.85).aspx

К сожалению, установка Visual Studio не имеет хорошей поддержки планирования пользовательских действий. Вам придется использовать другой бесплатный или коммерческий инструмент MSI-авторинга.

0 голосов
/ 07 сентября 2011

Возможно, можно обойти поведение установщика?

Вместо того, чтобы переписывать конфигурацию во время установки, что может сработать, чтобы ваше приложение протестировало при запуске ,Конфигурация имеет формат «Версия 1».Если это так, он выполняет обновление в этот момент.

Здесь есть (старые, но действительные) сведения об обновлении app.config: http://geekswithblogs.net/akraus1/articles/64871.aspx.

...