【问题标题】:Delphi CommonAppDataFolder seems un-writeableDelphi CommonAppDataFolder 似乎不可写
【发布时间】:2014-09-24 15:52:21
【问题描述】:

我获得了通用应用数据文件夹来存储我的应用相关文件。例如日志文件和 ini 配置文件。我使用以下代码:

const
    CSIDL_COMMON_APPDATA     = $0023;

function TSpecialFolders.GetSpecialFolder(
  const ASpecialFolderID: Integer): string;
var
   vSFolder :  pItemIDList;
  vSpecialPath : array[0..MAX_PATH] of Char;
begin
  SHGetSpecialFolderLocation(0, ASpecialFolderID, vSFolder);
  SHGetPathFromIDList(vSFolder, vSpecialPath);
  Result := vSpecialPath;
end;

function TSpecialFolders.GetCommonDocumentsFolder: string;
begin
  result := GetSpecialFolder(  CSIDL_COMMON_DOCUMENTS );
end;     

这在我的 Windows 7 机器上运行良好,并允许我的应用写入文件夹和文件。

在客户 PC 上(我认为它是旧版本的 Windows,因为屏幕截图的开始按钮上有“开始”一词)我的应用无法将文件写入该路径。

在我的电脑上,返回的路径是:

C:\ProgramData\

和我一起添加额外的文件夹,如下所示:

我的公司\我的应用\日志\

我的公司\myapp\db\

文本文件保存在这些文件夹中。

在我客户的 PC 上,函数返回:

C:\Documents and Settings\所有用户\应用程序数据

我无法将文本文件写入那里的目录结构。

我应该使用更好的功能,还是更好的公共文件夹?


为 SilverWarrior 编辑

这些是我客户 PC 上的特殊文件夹。

AppDataFolder : C:\Documents and Settings\Admin\Application Data CommonAppDataFolder : C:\Documents and Settings\All Users\Application Data CommonDocumentsFolder : C:\Documents and Settings\All Users\Documents LocalAppDataFolder : C:\Documents and Settings\Admin\Local Settings\Application Data MyDocumentsFolder : C:\Documents and Settings\Admin\My Documents

LocalAppDataFolder 的路径中有“Admin”,表明需要管理员权限。对吗?

【问题讨论】:

  • 请以管理员身份运行您的 Delphi,然后重试。如果这在你的 Delphi 中有效,那么解决方案是赋予程序管理员权限,我稍后会告诉你
  • 期望对共享文件夹的写访问受到限制
  • 不,@Jens,以管理员权限运行永远不是解决方案。正是这种技巧让您避免找到解决方案。在这种情况下,解决方案似乎是要求客户的系统管理员正确配置环境。另一种解决方案是使日志和数据库目录可配置。但即便如此,配置仍然需要写在某个地方。

标签: delphi delphi-6


【解决方案1】:

CSIDL_COMMON_APPDATA 文件夹默认受到保护,只有管理员对其有写权限。

要获得所有用户的访问权限,管理员必须在其中创建一个目录并向用户授予所需的权限。此任务通常由应用程序的安装程序完成(Fi InnoSetup 还可以选择授予此类文件夹所需的权限)。

【讨论】:

    【解决方案2】:

    问题是您试图将该数据保存到适用于所有用户的 AppData 文件夹中。默认情况下,写入此文件夹需要管理员权限。

    因此,不要使用 CSIDL_COMMON_APPDATA(所有用户的 AppData 文件夹),而是使用 CSIDL_LOCAL_APPDATA(当前用户 AppData 文件夹)。写入当前用户 AppData 文件夹不需要提升权限,因此它应该可以正常工作。

    【讨论】:

      【解决方案3】:

      好吧,有了来自这里的信息和与客户电脑的双跳远程桌面连接,我准备与 Windows 权限系统进行战斗 - 却发现问题是由于设置了应用程序的 ini 文件只读。

      点击率点击。问题解决了。

      当客户在 XP SP3 上以管理员身份运行其帐户时,所有关于通用应用数据文件夹受限制的 cmets 可能仍然适用。

      感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 2013-10-26
        • 2013-03-10
        • 2016-08-12
        • 1970-01-01
        • 2016-09-13
        • 1970-01-01
        相关资源
        最近更新 更多