Лучшее место для сохранения пользовательской информации для приложений Windows XP и Vista.
-
02-07-2019 - |
Вопрос
Мне нужно сохранить данные для входа в систему пользователя в зашифрованном виде для приложения, которое я создаю, но я не уверен, где лучше всего сохранить файл.Я не хочу сохранять его в папке приложения программы, так как мне нужно, чтобы это было для каждого пользователя.
Так в какую папку (или способ) лучше всего его сохранить?
Редактировать:Использование С++.
Решение
Похоже, что C:\Documents and Settings\%username%\Local Settings\Application Data может быть подходящим местом в соответствии с Википедия.В статье говорится, что это местоположение используется для «Настройки приложения для конкретного пользователя и компьютера».
Редактировать:Крузер отметил в комментариях (я бы ответил там, но пока не могу комментировать), что в Vista это C:\Users\%username% и что его не следует жестко запрограммировать.Спасибо.
Другие советы
Используйте Data Protection API (DPAPI) — часть CryptoAPI в XP и Vista.Вот хороший обзор DPAPI — http://msdn.microsoft.com/en-us/library/ms995355.aspx
Да, путь к локальному приложению выглядит выигрышным.
Я нашел эту статью в MSDN, чтобы получить ее на C++: http://msdn.microsoft.com/en-us/library/bb762494.aspx
Пример:
char localAppPath[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, localAppPath);
вы используете .NET?как насчет ИзолированныйХранения?Таким образом, вам не придется беспокоиться о местоположении каталога, он просто будет там...
Информация о пользователе всегда должна находиться в каком-либо подкаталоге %HOMEDRIVE%%HOMEPATH% (который соответствует домашнему каталогу пользователя).Без исключений.Хорошим местом для конкретных настроек приложения для каждого пользователя является подкаталог внутри %APPDATA%.Это соответствует:«%HOMEDRIVE%%HOMEPATH%\Application Data» в XP и для:«%HOMEDRIVE%%HOMEPATH%\AppData oaming» в Vista.
Если вы используете .NET для получения специальных папок, вы можете использовать
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
или
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
для версии без роуминга.