Ваше приложение не должно хранить свои настройки в Program Files, они должны храниться в CommonAppDataFolder
, AppDataFolder
или LocalAppDataFolder
. Если вы используете одну из этих папок для хранения настроек / данных приложения, пользователи могут установить ее в любое другое место, и приложение все равно увидит свои настройки / данные.
Насколько я понимаю, поведение при обновлении зависит от того, где вы запланировали RemoveExistingProducts
действие в последовательности установки.
Редактировать: Поскольку вы не можете изменить место, где ваше приложение хранит свой файл, вам придется вручную отслеживать места установки. После выполнения операции обновления обновленный продукт обычно устанавливается в то же место (для этого может потребоваться изменить пользовательский интерфейс мастера).
Если вы хотите сохранить настройки даже при ручной переустановке, то есть пользователи удалили ваше приложение, а затем снова установили его в другом месте, единственный вариант, который я вижу, - сохранить местоположение установки в реестре. Если значение не существует в реестре, ваши дополнительные действия не должны выполняться. Если значение с местоположением предыдущей установки существует, вы сохраните его. Затем вы перемещаете настройки / данные из старого местоположения в новое (добавляя временные строки в таблицу MoveFile
). В конце вы сохраните новое место установки в реестре.
Имейте в виду, что сохранение настроек / файлов в Program Files может работать не так, как ожидалось, в Windows Vista и выше, особенно если UAC включен; и ваши настройки могут храниться в виртуальном магазине, а не в программных файлах. Обновление вашего приложения было бы гораздо лучшим вариантом, чем попытка перемещения файлов.