C# Deployement, сохраняющий файлы поверх установки

Я создал проект установки и развертывания с использованием Visual Studio и установил установку. После установки я копирую несколько файлов (XML), которые при использовании приложения настраиваются программно. Теперь, если пользователь переустанавливает эту настройку снова, мне нужно спросить пользователя, должны ли эти сконфигурированные файлы быть перезаписаны или сохранены??

Любая идея относительно того, как это может быть достигнуто?

Спасибо и привет, Фрэн

2 ответа

Ознакомьтесь с правилами управления версиями файлов для установщика Windows.

Короче говоря, предполагая, что эти XML-файлы, на которые вы ссылаетесь, являются неверсированными текстовыми файлами, MSI будет сравнивать даты создания и изменения и не будет заменять обновленные XML-файлы, которые, по вашему мнению, обновляются программно (после установки).

Я бы предложил несколько других переменных, которые необходимо учитывать, чтобы убедиться, что все работает так, как вы ожидаете: серьезное или незначительное обновление и свойство REINSTALLMODE.

Я считаю, что лучший способ приблизиться к этому сценарию - реализовать логику "сохранить изменения" в вашем приложении, а не через установку. Это позволяет избежать усложнения вашей настройки и дает больший контроль над процессом конфигурации, поскольку вся логика встроена в ваш основной EXE-файл. Это означает, что вы можете пройти через процесс и отладить его обычным "способом разработки".

Для этого вы можете установить файлы "базовой конфигурации" в папку, доступную только для чтения, например

  • %ProgramFiles%\MyCompany\MyApp\MyConfig*.*

Затем ваше приложение может при запуске определить, существуют ли существующие файлы конфигурации в профиле пользователя (или в общедоступном месте для записи), и спросить пользователя, должны ли новые файлы конфигурации перезаписывать существующую конфигурацию или нет. Вы также можете легко реализовать функцию резервного копирования для старой конфигурации.

Чтобы задать вопрос только один раз для пользователя после развертывания, обычное приложение должно пометить HKLM последней установленной версией приложения и затем записать соответствующий флаг в HKCU, когда операция копирования завершена или пользователь отклонил ее:

  • HKLM\ Software \ MyCompany \ MyApp \ Version = 2.0.0
  • HKCU\ Software \ MyCompany \ MyApp \ Version = 1.0.0

В приведенном выше сценарии версия 2.0.0 приложения была установлена, но копия конфигурации для каждого пользователя еще не запущена для данного пользователя. После запуска версия HKCU будет установлена ​​на 2.0.0, и операция не будет выполняться снова, пока HKLM не будет увеличен.

Другие вопросы по тегам