Принудительная перезапись App.config во время установки
-
05-07-2019 - |
Вопрос
В настоящее время у нас есть 4 установщика для нашего клиентского программного обеспечения:
- Тестирование клиентской настройки
- Поддержка клиентского набора
- ClientUpdateTest Тест обновления клиента
- Обновление клиента для производства
Единственные различия между ними заключаются в том, что программа установки содержит распространяемые файлы Crystal Reports, а программа Обновления - нет.Тестирование и производство просто указывают, в какой среде они выполняются, и единственное отличие состоит в одной строке в файле Client.exe.config.
Глупо, я знаю, именно поэтому я заменил их все одним установщиком после избавления от Crystal Reports.Новый установщик записывает выбранную среду в setup.config, на который ссылается атрибут file (смотрите здесь).
Атрибут "file" является новым в файле конфигурации с этим новым установщиком.Проблема, с которой я сталкиваюсь, заключается в том, что если мы изменим файл Client.exe.config при старой установке, а затем запустим новый установщик, файл конфигурации никогда не будет обновлен с атрибутом "file".
Есть ли какой-нибудь способ заставить его обновить файл?RemovePreviousVersions точно не работает, поскольку это другой установщик, если только я чего-то не понимаю.Моя текущая идея, которая, вероятно, сработает, состоит в том, чтобы добавить код в метод OnBeforeInstall для переименования старого Client.exe.config в файл резервной копии, чтобы он всегда записывал новый.Однако, похоже, что в самом установщике должно быть более простое решение.Есть какие-нибудь идеи?
Редактировать:Переименование старого конфигурационного файла в Client.exe.config.old перед вызовом base.OnBeforeInstall() не сработало.Он переименовал файл, но так и не написал новый.
Решение
Установщик Windows не будет обновлять измененный файл.
Неверсионные файлы представляют собой пользовательские данные — если дата изменения более поздняя чем дата создания файла на компьютере, не устанавливайте файл, поскольку пользовательские настройки будут удалены.Если измененные и даты создания совпадают, установите файл.Если дата создания позже даты изменения, файл считается неизмененным, установите файл.
У вас есть несколько вариантов:
включите пользовательское действие, которое изменяет файл на месте.Это может быть сценарий или .NET-код.
делайте, как вы сказали - уберите существующий файл с дороги.Установщик не остановится на этом.Но вам нужно убедиться, что это происходит в том порядке, который вы себе представляете.Вам может понадобиться Косатка чтобы разобраться с порядком.
включите пользовательский параметр, чтобы установить дату создания на "сегодня".Это должно быть действительно просто с помощью скриптового пользовательского действия, использующего Сценарии.Объект файловой системы.Затем установщик Windows перезапишет его.