Delphi CommonAppDataFolder似乎是不可写的

时间:2014-09-24 15:52:21

标签: delphi delphi-6

我获取了公共应用程序数据文件夹来存储我的应用程序相关文件。例如日志文件和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,因为屏幕截图中有单词" start"在开始按钮上)我的应用程序无法将文件写入该路径。

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

C:\ ProgramData \

与我一起添加额外的文件夹:

myCompany中\ MyApp的\日志\

myCompany中\ MYAPP \分贝\

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

在我客户的PC上,该功能返回:

C:\ Documents and Settings \ All Users \ Application Data

我无法将文本文件写入目录结构中。

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


编辑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"在路径中建议需要管理员权限。是吗?

3 个答案:

答案 0 :(得分:3)

CSIDL_COMMON_APPDATA文件夹默认受保护,只有管理员具有写入权限。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

好吧,有来自这里的信息和一个双跳远程桌面连接到我的客户的电脑,我准备与Windows权限系统做斗争 - 只是发现问题是由于应用程序& #39; s ini文件设置为只读。

点击次数。问题解决了。

有关受限制的常见应用数据文件夹的所有评论仍可能适用,因为客户在XP SP3上以管理员身份运行其帐户。

感谢您的帮助。