Где хранить записываемые данные, которые будут доступны всем пользователям в программе установки Vista? - PullRequest
4 голосов
/ 22 сентября 2008

Мое приложение установлено через NSIS.

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

Я могу сделать это, установив в каталог 'program files'.

Существует файл базы данных (firebird), которым должны делиться все учетные записи пользователей в системе.

Если я сохраню этот файл базы данных в каталоге программных файлов, он будет доступен только для чтения.

Если я сохраню его в каталоге APPDATA пользователей, у каждого из них будет своя копия, когда один пользователь добавляет данные, другие не увидят его.

Вариант 1. В моем каталоге приложений в разделе «программные файлы» создайте каталог «Данные», в моем установщике сделайте этот каталог доступным для чтения всем, чтобы виртуализация пользовательских «программных файлов» не запускалась и все пользователи могут обновлять файл и видеть изменения друг друга.

Есть ли другие варианты?

Ответы [ 4 ]

4 голосов
/ 22 сентября 2008

Данные для всех пользователей должны храниться в% ALLUSERSPROFILE% или вызвать SHGetFolderPath () с параметром CSIDL_COMMON_APPDATA, чтобы получить область хранения всех пользователей.

Подробнее см. http://www.deez.info/sengelha/2006/02/28/windows-vista-changes/.

3 голосов
/ 22 сентября 2008

Где-то под профилем All Users будет очевидное местоположение. Я думаю, что есть некоторые правила относительно того, кто получает чтение / запись по умолчанию, но документация MS рекомендует, если вам нужно что-то другое для создания подкаталога и установки ACL прямо в установщике.

0 голосов
/ 07 мая 2009

В частности, я бы использовал:

SetShellVarContext all
SetOutPath $APPDATA
File "MyInsecurelySharedFile.txt"

См. NSIS Scripting Reference для получения дополнительной информации.

0 голосов
/ 22 сентября 2008

Это дыра в безопасности, см .: http://blogs.msdn.com/oldnewthing/archive/2004/11/22/267890.aspx

...