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

В настоящее время у нас есть 4 установщика для нашего клиентского программного обеспечения:

  • ClientSetupTest
  • ClientSetupProduction
  • ClientUpdateTest
  • ClientUpdateProduction

Единственное различие между ними заключается в том, что программа установки содержит распространяемые файлы Crystal Reports, а программа обновления — нет. Test и Production просто указывают, в какой среде они работают, и единственное отличие состоит в одной строке в файле Client.exe.config.

Глупо, я знаю, поэтому я заменил их всех одним установщиком после того, как избавился от Crystal Reports. Новый установщик записывает выбранную среду в setup.config, на который ссылается атрибут файла (см. здесь).

Атрибут «файл» является новым для файла конфигурации с этим новым установщиком. Проблема, с которой я сталкиваюсь, заключается в том, что если мы изменим файл Client.exe.config в старой установке, а затем запустим новый установщик, файл конфигурации никогда не будет обновлен с помощью атрибута «файл».

Есть ли способ заставить его обновить файл? RemovePreviousVersions точно не работает, так как это другой установщик, если я что-то не понимаю. Моя текущая идея, которая, вероятно, сработает, состоит в том, чтобы добавить код в метод OnBeforeInstall для переименования старого файла Client.exe.config в файл резервной копии, чтобы он всегда записывал новый. Однако похоже, что в самом установщике должно быть более простое решение. Любые идеи?

EDIT: переименование старого файла конфигурации в Client.exe.config.old перед вызовом base.OnBeforeInstall() не сработало. Он переименовал файл, но так и не написал новый.


person Chris Doggett    schedule 29.07.2009    source источник


Ответы (1)


Установщик Windows не будет обновлять измененный файл .

Неверсионные файлы — это данные пользователя. Если дата изменения более поздняя, ​​чем дата создания файла на компьютере, не устанавливайте файл, так как пользовательские настройки будут удалены. Если даты изменения и создания совпадают, установите файл. Если дата создания более поздняя, ​​чем дата изменения, файл считается неизмененным, установите файл.

У вас есть несколько вариантов:

  • включить пользовательское действие, которое изменяет файл на месте. Это может быть скрипт или код .NET. .

  • делайте как вы говорите - переместите существующий файл в сторону. Установщик не остановится на этом. Но вам нужно убедиться, что это происходит именно в том порядке, который вы себе представляете. Вам может понадобиться Orca, чтобы выяснить порядок .

  • включить пользовательскую опцию, чтобы установить дату создания «сегодня». Это должно быть очень просто с помощью сценария пользовательского действия, использующего Сценарий.FileSystemObject. Затем установщик Windows перезапишет его.

person Cheeso    schedule 31.08.2009
comment
Спасибо. Попробую пользовательский вариант. У меня по-прежнему будет проблема с переносом их пользовательских настроек, но если они были изменены, я могу обнаружить это и скопировать старую конфигурацию. - person Chris Doggett; 01.09.2009