Принудительная перезапись App.config во время установки - PullRequest
5 голосов
/ 29 июля 2009

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

  • ClientSetupTest
  • ClientSetupProduction
  • ClientUpdateTest
  • ClientUpdateProduction

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

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

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

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

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

1 Ответ

4 голосов
/ 01 сентября 2009

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

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

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

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

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

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

...