【发布时间】:2010-09-12 23:58:24
【问题描述】:
存储对每个用户都相同但必须对程序可写的程序数据文件的正确位置是什么? MS Windows XP 上的等效位置是什么?我读过 C:\ProgramData 在普通用户安装后不可写。真的吗?如何使用 Platform SDK 以编程方式检索该目录?
【问题讨论】:
标签: windows-vista directory shared programdata
存储对每个用户都相同但必须对程序可写的程序数据文件的正确位置是什么? MS Windows XP 上的等效位置是什么?我读过 C:\ProgramData 在普通用户安装后不可写。真的吗?如何使用 Platform SDK 以编程方式检索该目录?
【问题讨论】:
标签: windows-vista directory shared programdata
SHGetFolderPath(),CSIDL 为 CSIDL_COMMON_APPDATA。
阅读更多http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx
如果需要批处理文件中的路径,也可以使用%ALLUSERSPROFILE% 环境变量。
【讨论】:
这里有不同选项的精彩总结:http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx
我应该在哪里写程序数据 而不是程序文件?
常见的应用程序代码更新是 这个:“我的应用程序曾经写 文件到程序文件。感觉就像 放置它的好地方 其他。它上面有我的应用程序的名称 已经有了,因为我的用户是 管理员,它工作得很好。但现在我明白了 这可能不是一个好地方 像我曾经想的那样坚持, 因为有了 UAC 甚至管理员 以标准用户权限运行 大多数时候。那么,我应该在哪里 代替我的文件?”
【讨论】:
实际上SHGetFolderPath 已被弃用。
应该改用SHGetKnownFolderPath。
【讨论】:
你可以使用:
CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
【讨论】:
见Raymond Chen's article on this specific question。
简而言之,您要求的是安全漏洞。
【讨论】: