В каком месте лучше всего хранить файл конфигурации программы в WINDOWS?

Моя программа требует, чтобы некоторые детали конфигурации хранились в файле .ini. Эта программа также устанавливает расширения для IE и firefox, и я хочу также прочитать эти файлы .ini из этих расширений. Если я сохраню .ini в "... AppData / Roaming ...", расширение IE в защищенном режиме не сможет читать / писать. Насколько мне известно, только AppData / LocalLow может читать только в защищенном режиме. Если я перенесу все детали своей конфигурации в этот "... AppData / LocalLoe ...", он будет работать всегда? Это стандартный способ? все, что я написал, относится к Vista, будет ли это работать с XP? Win7?


person ManojMarathayil    schedule 20.07.2009    source источник


Ответы (2)


См. Мой ответ на этот вопрос: Как решить, где хранить состояние каждого пользователя? Реестр? Данные приложения? Изолированное хранилище?

процитировать оттуда:

Файлы в папке «Роуминг» пользователя в Vista или «Данные приложения» в XP перемещаются вместе с пользователем, поэтому любые настройки и данные должны храниться там.

Файлы «Local» и «LocalLow» в Vista и «Local Settings» в XP этого не делают, так что это хорошее место для временных файлов, вещей, которые привязаны к конкретному компьютеру или данных, которые можно пересчитать.

В Vista, как часть новых функций безопасности, которые мы все знаем и любим, у вас могут быть программы, работающие в «режиме низкой целостности» (например, IE в защищенном режиме), эти программы работают с ограниченными привилегиями и не могут получить доступ к файлам в профиль пользователя - за исключением файлов в папке "LocalLow".

Итак, в заключение, файлы, хранящиеся в "LocalLow", по своей сути небезопасны, а файлы в "Local" / "Local Settings", вероятно, будут недоступны в некоторых крупных компаниях - поэтому, если у вас нет веской причины и точно знаете, что вы делаете, используйте «Роуминг» / «Данные приложения».

ОБНОВЛЕНИЕ:

  1. При использовании роуминга профилей (большая совместная среда) содержимое Local и LocalLow может (и будет) исчезнуть без предупреждения.
  2. Это все настройки для каждого пользователя, если ваш сервер работает под другой учетной записью, чем пользователь (например, системной или сетевой), они получат разные копии этих папок.
person Nir    schedule 20.07.2009
comment
Спасибо за ответ. Мое основное приложение - это крошечный веб-сервер, и у нас есть расширение как для IE, так и для Firefox. Поэтому нам нужно сохранить порт, на котором работает веб-сервер, в .ini, и расширение должно иметь возможность читать его, чтобы мы могли создать правильный URL-адрес. Если я останусь в защищенном режиме Roaming IE, я не смогу его прочитать, и если я сохраню это в LocalLow, я не смогу найти интерфейс XPCom (с возможностью сценария), чтобы найти путь к папке LocalLow. - person ManojMarathayil; 20.07.2009
comment
Я ничего не знаю о XPCom, поэтому я не могу вам с этим помочь, как сказал jia3ep, API Win32 для получения пути - это SHGetKnownFoldedPath. - person Nir; 20.07.2009

Чтобы получить путь к папке с данными программы, вы должны использовать WinAPI:

wchar_t path_buf[MAX_PATH];
SHGetFolderPath( NULL, CSIDL_COMMON_APPDATA, NULL, SHGFP_TYPE_CURRENT, &path_buf[0] );

В Windows Vista функция SHGetFolderPath была заменена на SHGetKnownFoldedPath. Эта старая функция теперь просто оболочка для SHGetKnownFolderPath.

person Kirill V. Lyadvinsky    schedule 20.07.2009