Может ли обновление установить заменить файлы? - PullRequest
2 голосов
/ 26 апреля 2011

Похоже, что обновления не заменяют файлы новыми версиями, но фактически удаляют старый установочный пакет и устанавливают новый установочный пакет. Давайте представим, что я установил свое приложение, и оно сгенерировало несколько файлов в каталоге установки. Затем пользователь получает новую версию продукта и запускает установочный пакет. Пакет удаляет старую версию продукта (поскольку в новом пакете установки для параметра «удалить предыдущие версии» установлено значение «истина», более высокий номер версии и другой код продукта). Файлы, созданные приложением, но не пакетом, не удаляются, и это хорошо. Но пользователь может установить новую версию в другое место, и тогда приложение не найдет старые файлы приложения. Как с этим бороться? Напишите некоторые пользовательские действия и условия, которые пропускают экран выбора папки, если приложение уже установлено? Или, может быть, уже есть встроенный способ обновления старых установленных файлов в указанном каталоге?

1 Ответ

1 голос
/ 26 апреля 2011

Ваше приложение не должно хранить свои настройки в Program Files, они должны храниться в CommonAppDataFolder, AppDataFolder или LocalAppDataFolder. Если вы используете одну из этих папок для хранения настроек / данных приложения, пользователи могут установить ее в любое другое место, и приложение все равно увидит свои настройки / данные.


Насколько я понимаю, поведение при обновлении зависит от того, где вы запланировали RemoveExistingProducts действие в последовательности установки.


Редактировать: Поскольку вы не можете изменить место, где ваше приложение хранит свой файл, вам придется вручную отслеживать места установки. После выполнения операции обновления обновленный продукт обычно устанавливается в то же место (для этого может потребоваться изменить пользовательский интерфейс мастера).

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

Имейте в виду, что сохранение настроек / файлов в Program Files может работать не так, как ожидалось, в Windows Vista и выше, особенно если UAC включен; и ваши настройки могут храниться в виртуальном магазине, а не в программных файлах. Обновление вашего приложения было бы гораздо лучшим вариантом, чем попытка перемещения файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...