请有人建议放置一些应由所有用户访问和编辑的应用程序数据的最佳位置(路径)是什么。
这是考虑到 Windows XP 和 Windows Vista,我希望上述路径的任何文件的更改都不会触发 UAC!
请有人建议放置一些应由所有用户访问和编辑的应用程序数据的最佳位置(路径)是什么。
这是考虑到 Windows XP 和 Windows Vista,我希望上述路径的任何文件的更改都不会触发 UAC!
普通 Win API:SHGetFolderPath文件夹CSIDL_COMMON_APPDATA
类型。
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
应解析为 C:\Documents and Settings\All Users\Application Data\
从那里,创建子文件夹,例如 MyCompany\MyApp
如果您使用的是 .NET,Application.CommonAppDataPath 应该可以工作。还要确保为您的应用程序关闭虚拟化
%ALLUSERSPROFILE%\Application Data\App
这可能是所有用户无需提升权限即可访问的唯一目录。
如果您使用的是 .NET,Application.CommonAppDataPath 应该可以工作。
如果用户不打算直接修改数据,只会由应用程序修改,那么IsolatedStorage怎么样 - http://msdn.microsoft.com/en-us/library/3ak841sy(VS.80).aspx
Checkers 提供了在 C 或 C++ 中执行此操作的重要线索。所以我投票给了他的答案。
以下是他遗漏的细节:
// assumes
// company is a pointer to a character sting containing company name
// appname is a pointer to a character string containing application name
// fname is a pointer to a character string cintaining name of file to be created
#include <shlobj.h> // for SHGetFolderPath
#include <direct.h> // for _mkdir
char path[MAX_PATH];
SHGetFolderPath(NULL,CSIDL_COMMON_APPDATA,NULL,NULL,path);
strcat(path,"/");
strcat(path,company);
_mkdir(path);
strcat(path,"/");
strcat(path,appname);
_mkdir(path);
strcat(path,"/");
strcat(path,fname);
// path is now a character string which can passed to fopen
您也可以将其放入数据库中。
对于 Vista 及更高版本,MS 似乎正在推动使用SHGetKnownFolderPath()而不是SHGetFolderPath()。从KNOWNFOLDERIDs 列表中选择要请求的文件夹。根据此处的答案,您想要的等价物可能是FOLDERID_ProgramData
. 我意识到这个问题已经很老了,但我想出于存档目的..