15

存储对每个用户都相同但必须对程序可写的程序数据文件的正确位置是什么?MS Windows XP 上的等效位置是什么?我读过 C:\ProgramData 在普通用户安装后不可写。真的吗?如何使用 Platform SDK 以编程方式检索该目录?

4

5 回答 5

8

SHGetFolderPath()CSIDL 为CSIDL_COMMON_APPDATA.

在http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx阅读更多内容

如果需要批处理文件中的路径,也可以使用%ALLUSERSPROFILE%环境变量。

于 2008-09-25T06:09:17.270 回答
7

这里有不同选项的一个很好的总结:http: //blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files .aspx

我应该在哪里写程序数据而不是程序文件?

一个常见的应用程序代码更新是这样的:“我的应用程序过去常常将文件写入程序文件。感觉就像放置它的好地方一样。它上面已经有我的应用程序的名称,而且因为我的用户是管理员,所以它工作得很好。但是现在我发现这可能不像我曾经想象的那么好,因为使用 UAC,即使管理员在大多数时间都以标准用户权限运行。所以,我应该把我的文件放在哪里?”

于 2008-11-23T23:34:23.710 回答
4

实际上SHGetFolderPath已弃用。

SHGetKnownFolderPath应改为使用。

于 2009-02-12T00:17:29.093 回答
1

您可以使用:

CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
于 2008-09-25T06:10:52.773 回答
1

请参阅Raymond Chen 关于这个特定问题的文章

简而言之,您要求的是一个安全漏洞

于 2008-09-25T06:13:44.093 回答