File 保存Windows XP和Vista应用程序用户信息的最佳位置
我需要为我正在构建的应用程序以加密形式保存用户的登录信息,但我不确定保存文件的最佳位置。我不想将它保存到程序应用程序文件夹中,因为我希望每个用户都能使用它 那么,保存它的最佳文件夹(或方式)是什么File 保存Windows XP和Vista应用程序用户信息的最佳位置,file,windows-vista,windows-xp,save,File,Windows Vista,Windows Xp,Save,我需要为我正在构建的应用程序以加密形式保存用户的登录信息,但我不确定保存文件的最佳位置。我不想将它保存到程序应用程序文件夹中,因为我希望每个用户都能使用它 那么,保存它的最佳文件夹(或方式)是什么 编辑:使用C++ .< /p> 你使用.NET吗?怎么样这样,您就不必担心目录位置,它就在那里……使用数据保护API(DPAPI)——XP和Vista中CryptoAPI的一部分。这里是DPAPI的一个很好的概述-似乎C:\Documents and Settings\%username%\Local
<>编辑:使用C++ .< /p> 你使用.NET吗?怎么样这样,您就不必担心目录位置,它就在那里……使用数据保护API(DPAPI)——XP和Vista中CryptoAPI的一部分。这里是DPAPI的一个很好的概述-似乎C:\Documents and Settings\%username%\Local Settings\应用程序数据可能是合适的位置。文章说,这个位置用于“特定于用户和特定于计算机的应用程序设置”
编辑:Cruizer在评论中指出(我会在那里回复,但我还不能评论),在Vista中它是C:\Users\%username%,不应该硬编码。谢谢。用户信息应始终位于%HOMEDRIVE%%HOMEPATH%(映射到用户主目录)的某个子目录中。没有例外。
每个用户的应用程序特定设置的一个好位置是%APPDATA%内的子目录。这将映射到XP上的“%HOMEDRIVE%%HOMEPATH%\Application Data”和Vista上的“%HOMEDRIVE%%HOMEPATH%\AppData\Roaming”。是的,本地应用程序路径看起来是赢家 我在MSDN中找到了这篇文章,以便在C++中获得它: 例如:
char localAppPath[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, localAppPath);
如果您使用.NET获取特殊文件夹,则可以使用
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
或
对于非漫游版本。您可能需要注意,新版本/安装的应用程序仍然可以看到原始的独立存储文件。即使已加密,也不应将用户凭据存储在普通文件中。您真的应该将它们保存在数据保护存储中。但这毕竟是你的选择…:-)Vista没有C:\Documents and Settings\%username%-->默认情况下它在C:\Users\%username%中,并且可以更改它,因此路径不应硬编码。获取此文件夹的正确方法是调用:SHGetSpecialFolderPath(NULL,szPath,CSIDL_PERSONAL,false)amendment到我的评论。您需要使用CSIDL_APPDATA。CSIDL_PERSONAL用于用户文档目录。
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);