我在一所大型大学的一个用户(我想,大学 IT 部门通常在他们的计算机上使用的激进的安全设置)正在获得 Windows XP 返回的空字符串,用于 CSIDL_COMMON_APPDATA 或 CSIDL_PERSONAL。(我不确定其中哪个返回了空字符串,因为我还没有检查他的计算机以查看他是如何安装软件的,但我很确定它是 COMMON_APPDATA ......)
有没有人遇到过这个问题或对如何处理这个问题有建议?
这是我用来检索值的 Delphi 代码:
Function GetSpecialFolder( FolderID: Integer):String;
var
PIDL: PItemIDList;
Path: array[0..MAX_PATH] of Char;
begin
SHGetSpecialFolderLocation(Application.Handle, FolderID, PIDL);
SHGetPathFromIDList(PIDL, Path);
Result := Path;
end; { GetSpecialFolder }
ShowMessage(GetSpecialFolder(CSIDL_COMMON_APPDATA)); <--- This is an empty string
编辑:
弄清楚这个 API 让我觉得自己在追赶我的尾巴——我绕着圈子试图找到正确的调用。据说这种方法和其他类似方法已被 Microsoft 弃用(以及该问题的早期发布者(@TLama?),后来删除了该帖子。)但是,似乎我们大多数人,包括我,经常并安全地忽略该状态。
在我的搜索中,我从前一段时间在 SO 上找到了一个很好的答案,包括不推荐使用的示例代码:是什么导致了这个错误 'Unable to write to application file.ini'。