7

可能重复:
VS2008 安装项目:共享(由所有用户)应用程序数据文件?

请有人建议放置一些应由所有用户访问和编辑的应用程序数据的最佳位置(路径)是什么。

这是考虑到 Windows XP 和 Windows Vista,我希望上述路径的任何文件的更改都不会触发 UAC!

4

10 回答 10

5

普通 Win API:SHGetFolderPath文件夹CSIDL_COMMON_APPDATA类型。

于 2008-10-03T13:39:56.847 回答
2
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

应解析为 C:\Documents and Settings\All Users\Application Data\

从那里,创建子文件夹,例如 MyCompany\MyApp

于 2008-10-03T13:35:34.517 回答
2

VS2008 安装项目:共享(由所有用户)应用程序数据文件?

于 2008-10-03T13:36:15.590 回答
2

如果您使用的是 .NET,Application.CommonAppDataPath 应该可以工作。还要确保为您的应用程序关闭虚拟化

于 2008-12-31T11:06:01.780 回答
1

%ALLUSERSPROFILE%\Application Data\App
这可能是所有用户无需提升权限即可访问的唯一目录。

于 2008-10-03T13:37:38.363 回答
1

如果您使用的是 .NET,Application.CommonAppDataPath 应该可以工作。

于 2008-10-03T13:38:06.337 回答
1

如果用户不打算直接修改数据,只会由应用程序修改,那么IsolatedStorage怎么样 - http://msdn.microsoft.com/en-us/library/3ak841sy(VS.80).aspx

于 2008-10-03T13:41:43.693 回答
1

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
于 2008-10-10T13:39:00.983 回答
0

您也可以将其放入数据库中。

于 2008-12-31T11:09:01.337 回答
0

对于 Vista 及更高版本,MS 似乎正在推动使用SHGetKnownFolderPath()而不是SHGetFolderPath()从KNOWNFOLDERIDs 列表中选择要请求的文件夹。根据此处的答案,您想要的等价物可能是FOLDERID_ProgramData. 我意识到这个问题已经很老了,但我想出于存档目的..

于 2011-09-20T17:12:52.257 回答