Можем ли мы указать программе установки Visual Studio сохранить существующие файлы для повторной установки?
У меня есть приложение Windows Forms с установщиком (.msi), уже созданным с помощью Visual Studio. Я сейчас создаю новый установщик для версии 2.0 со свойством RemovePreviousVersions
установите в true.
Теперь, когда я устанавливаю 2.0 поверх 1.0, он удаляет 1.0 и полностью устанавливает 2.0.
Есть ли способ, которым я могу сообщить установщику, что если вы обнаружите, что некоторые файлы уже установлены (например, файлы XML, используемые для данных), то не переопределяете их?
Я пытаюсь, чтобы мой установщик 2.0 служил двум целям:
- Установить с нуля для новых пользователей
- Существующие пользователи будут обновляться, но не теряют свои настройки
2 ответа
Проект развертывания в VS не перезаписывает файлы. Что происходит, так как для RemovePreviousVersions установлено значение true, при изменении версии файла программы и GUID ProductCode проекта установки сначала будет удалена предыдущая версия, а затем будет произведена чистая установка новой версии.
Чтобы некоторые файлы не перезаписывались, я обычно исключаю их из выходных файлов Content или Primary (где бы они ни находились), а затем добавляю их отдельно в проект установки. Делая это, вы можете индивидуально установить свойства для этих файлов. Свойство, которое вы ищете, называется Permanent, которое, если установлено в true, никогда не удалит рассматриваемый файл и, следовательно, никогда не перезапишет его новой версией. Единственный недостаток - это то, что при удалении продукта постоянные файлы не будет удален из их целевых местоположений, но в моем случае (обычно это локальные файлы БД), это хорошо;)
Ура!
[править] Вышесказанное верно для VS 2008 SP1. Не пробовал его в других версиях, так что, надеюсь, вы используете ту же версию VS или она работает для той версии, которую вы используете.
[edit2] О, вы также можете использовать свойство "Condition" для достижения чего-то похожего. Если вы сделаете это, убедитесь, что для параметра "Transitive" установлено значение True, чтобы условие всегда оценивалось. Не пробовал это с Условиями, но это еще один вариант, на который вы могли бы взглянуть. Помимо этих двух, я думаю, что это в значительной степени это для проектов развертывания VS.
Когда я оказался в подобной ситуации, я сделал следующее:
Файлы, которые были настроены каждым пользователем и НЕ должны быть затронуты установщиком, НЕ были включены в MSI (НЕ в проект установки Visual Studio). Когда приложение запускалось впервые, я генерировал XML-файлы с помощью кода.
Файлы, которые были статическими (например, данные, которые использовались для заполнения выпадающих списков), я включил в MSI, и я могу обновить их, создав новый MSI с помощью Visual Studio.
По сути, не включайте настраиваемые файлы в ваш проект MSI. Создайте их в коде для новых пользователей.
Я никогда не говорил MSI не обновлять определенные файлы, которые включены в файл MSI. Решение, которое я придумал, было для меня идеальным. Я не знаю, можно ли это сделать.
Надеюсь, это поможет.