Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 保存Windows XP和Vista应用程序用户信息的最佳位置_File_Windows Vista_Windows Xp_Save - Fatal编程技术网

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);