gpt4 book ai didi

delphi - 为什么 COMMON_APPDATA 在 Windows XP 上返回为空字符串

转载 作者:行者123 更新时间:2023-12-02 04:37:36 25 4
gpt4 key购买 nike

我在一所大型大学的一个用户(我想,大学 IT 部门在其计算机上一般都有严格的安全设置)正在获取 Windows XP 针对 CSIDL_COMMON_APPDATA 或返回的空字符串 CSIDL_个人。 (我不确定其中哪个返回空字符串,因为我还没有检查他的计算机以了解他如何安装该软件,但我很确定它是 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?),他随后删除了该帖子。)但是,似乎我们大多数人,包括我,经常并安全地忽略该状态。

在我的搜索中,我在不久前在这里找到了一个很好的答案,包括不推荐的执行此操作的方法的示例代码:what causes this error 'Unable to write to application file.ini' .

最佳答案

如果您想找出 API 调用失败的原因,您需要检查返回值。这就是这段代码中缺少的内容。

您需要根据每个函数的优点来对待它。阅读 MSDN 上的文档。对于SHGetSpecialFolderLocation,返回值为HRESULT。对于SHGetPathFromIDList,您将返回一个BOOL。如果该值为 FALSE,则调用失败。

这里的罪魁祸首可能是 SHGetSpecialFolderLocation,即接收 CSIDL 的代码,但每次调用 Windows API 函数时都必须检查错误。

查看 CSIDL 的文档我们看到这个:

CSIDL_COMMON_APPDATA

Version 5.0. The file system directory that contains application data for all users. A typical path is C:\Documents and Settings\All Users\Application Data. This folder is used for application data that is not user specific. For example, an application can store a spell-check dictionary, a database of clip art, or a log file in the CSIDL_COMMON_APPDATA folder. This information will not roam and is available to anyone using the computer.

如果计算机的 shell 版本低于 5.0,则不支持此 CSIDL 值。这是此 CSIDL 值的唯一记录的故障模式。我认为这不适用于您的情况,因此您只需查看 HRESULT 状态代码的内容即可。

关于delphi - 为什么 COMMON_APPDATA 在 Windows XP 上返回为空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com