Моя программа требует, чтобы некоторые детали конфигурации хранились в файле .ini. Эта программа также устанавливает расширения для IE и firefox, и я хочу также прочитать эти файлы .ini из этих расширений. Если я сохраню .ini в "... AppData / Roaming ...", расширение IE в защищенном режиме не сможет читать / писать. Насколько мне известно, только AppData / LocalLow может читать только в защищенном режиме. Если я перенесу все детали своей конфигурации в этот "... AppData / LocalLoe ...", он будет работать всегда? Это стандартный способ? все, что я написал, относится к Vista, будет ли это работать с XP? Win7?
В каком месте лучше всего хранить файл конфигурации программы в WINDOWS?
Ответы (2)
См. Мой ответ на этот вопрос: Как решить, где хранить состояние каждого пользователя? Реестр? Данные приложения? Изолированное хранилище?
процитировать оттуда:
Файлы в папке «Роуминг» пользователя в Vista или «Данные приложения» в XP перемещаются вместе с пользователем, поэтому любые настройки и данные должны храниться там.
Файлы «Local» и «LocalLow» в Vista и «Local Settings» в XP этого не делают, так что это хорошее место для временных файлов, вещей, которые привязаны к конкретному компьютеру или данных, которые можно пересчитать.
В Vista, как часть новых функций безопасности, которые мы все знаем и любим, у вас могут быть программы, работающие в «режиме низкой целостности» (например, IE в защищенном режиме), эти программы работают с ограниченными привилегиями и не могут получить доступ к файлам в профиль пользователя - за исключением файлов в папке "LocalLow".
Итак, в заключение, файлы, хранящиеся в "LocalLow", по своей сути небезопасны, а файлы в "Local" / "Local Settings", вероятно, будут недоступны в некоторых крупных компаниях - поэтому, если у вас нет веской причины и точно знаете, что вы делаете, используйте «Роуминг» / «Данные приложения».
ОБНОВЛЕНИЕ:
- При использовании роуминга профилей (большая совместная среда) содержимое Local и LocalLow может (и будет) исчезнуть без предупреждения.
- Это все настройки для каждого пользователя, если ваш сервер работает под другой учетной записью, чем пользователь (например, системной или сетевой), они получат разные копии этих папок.
Чтобы получить путь к папке с данными программы, вы должны использовать WinAPI:
wchar_t path_buf[MAX_PATH];
SHGetFolderPath( NULL, CSIDL_COMMON_APPDATA, NULL, SHGFP_TYPE_CURRENT, &path_buf[0] );
В Windows Vista функция SHGetFolderPath была заменена на SHGetKnownFoldedPath. Эта старая функция теперь просто оболочка для SHGetKnownFolderPath.