Где хранить доступные для записи данные, которые будут доступны всем пользователям в установщике Vista?
-
02-07-2019 - |
Вопрос
Мое приложение установлено через NSIS.
Я хочу, чтобы установщик установил программу для всех пользователей.
Я могу сделать это, установив в каталог "program files".
Существует файл базы данных (firebird), которым должны пользоваться все учетные записи пользователей в системе.
Если я сохраню этот файл базы данных в каталоге program files, он будет доступен только для чтения.
Если я сохраню его в каталоге users APPDATA, у каждого из них будет своя копия, и когда один пользователь добавит данные, другие их не увидят.
Вариант 1 - В каталоге моего приложения в разделе "program files" создайте каталог "Data", в моем установщике сделайте этот каталог доступным для чтения и записи для всех, таким образом, пользовательская виртуализация "program files" не сработает, и все пользователи смогут обновлять файл и видеть изменения друг друга.
Есть еще варианты ?
Решение
Данные для всех пользователей должны храниться в %ALLUSERSPROFILE%, или вызовите SHGetFolderPath() с параметром CSIDL_COMMON_APPDATA, чтобы получить область хранения для всех пользователей.
Видишь http://www.deez.info/sengelha/2006/02/28/windows-vista-changes/ для получения более подробной информации.
Другие советы
Где-то под профилем "Все пользователи" должно быть очевидное местоположение.Я думаю, что есть некоторые правила о том, кто получает доступ к чтению / записи по умолчанию, но документация MS рекомендует, если вам нужно что-то другое, создать подкаталог и установить списки управления доступом прямо в программе установки.
Это дыра в системе безопасности, понимаете: http://blogs.msdn.com/oldnewthing/archive/2004/11/22/267890.aspx
В частности, я бы использовал:
SetShellVarContext all
SetOutPath $APPDATA
File "MyInsecurelySharedFile.txt"
Смотрите на Ссылка на сценарий NSIS для получения дополнительной информации.