Запись в AppData из проекта установки и развертывания

Я обновляю существующее приложение, установленное через проект установки и развертывания.

Старое приложение скопировало конфигурацию и файл базы данных в папку приложения в Program Files во время установки. Это отлично работало на Win 2000 и Win Xp (под учетной записью локального администратора). Однако в Windows 7 это не только не одобряется, но и не работает из-за UAC.

Итак, я хочу обновить приложение, чтобы записать его конфигурацию / данные в CommonApplicationData. В существующем проекте установки и развертывания вы можете легко выбрать некоторые места в качестве целей для копирования файлов. то есть папка приложения, рабочий стол пользователя и программные файлы пользователя.

Я не вижу аналогичных средств, чтобы указать программе установки скопировать в папки AppData / CommonApplicationData. Есть ли это, а если нет, есть ли какие-нибудь простые исправления?

Спасибо!


person turtle    schedule 25.08.2010    source источник


Ответы (1)


Сделайте щелчок правой кнопкой мыши | Добавить специальную папку | Пользовательская папка и назовите ее как хотите (подойдет общая папка данных приложения)

В сетке свойств папки измените атрибут DefaultLocation на [CommonAppDataFolder].

Добавьте файл в папку, соберите и установите. Вы должны найти свой файл в C: \ ProgramData в Windows 7.

Имейте в виду, что я настоятельно рекомендую другие инструменты, такие как InstallShield и WiX, поверх проектов развертывания Visual Studio. Возможности этого инструмента очень ограничены, и в конечном итоге вы столкнетесь с кирпичной стеной.

person Christopher Painter    schedule 25.08.2010
comment
По большей части это работало хорошо, но я добавил несколько файлов в каталог, включая файл базы данных. Я могу нормально записывать новые файлы в папке и перезаписывать существующие файлы, но в базе данных указано, что они доступны только для чтения. Есть какие-нибудь мысли? - person turtle; 25.08.2010
comment
Стиль MS-DOS только для чтения (attrib + R) или NTFS ACL только для чтения? (У пользователя нет прав) (кстати, это действительно новый вопрос) - person Christopher Painter; 25.08.2010
comment
Прости. Я вроде как согласен, но я думаю, это сильно связано. Используя вышеупомянутый метод, я могу создавать файлы и папки, однако, похоже, что папки создаются как доступные только для чтения для обычных пользователей, что, похоже, противоречит использованию папки данных приложения. Есть ли способ отредактировать вышеуказанный метод, чтобы проект установки и развертывания создавал папки как доступные для записи стандартному пользователю? - person turtle; 26.08.2010
comment
Вы спросили, как развернуть файлы в папке CommonApplicationData, вы не спросили, есть ли у этой папки права записи по умолчанию для обычных пользователей. Насколько мне известно, в Windows нет такой хорошо известной папки, что мне всегда казалось странным. Установщик Windows может изменять права доступа к папке с помощью таблицы LockPermissions, но проекты развертывания Visual Studio этого не раскрывают. Помните мое предупреждение о кирпичной стене? Для простого решения переместите эти файлы в модуль слияния WiX v3 и используйте элемент Permission WiX. Затем используйте этот модуль слияния в своей установке VDRPOJ. - person Christopher Painter; 26.08.2010
comment
Это похоже на рефакторинг EXE в EXE и DLL и приводит к лучшей поддержке кода в долгосрочной перспективе, а модуль слияния теперь представляет единственную ответственность, и MSI не слишком обеспокоен (класс Бога). - person Christopher Painter; 26.08.2010