Принудительная перезапись App.config во время установки

StackOverflow https://stackoverflow.com/questions/1201118

  •  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 перезапишет его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top