我获取了公共应用程序数据文件夹来存储我的应用程序相关文件。例如日志文件和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"在路径中建议需要管理员权限。是吗?
答案 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上以管理员身份运行其帐户。
感谢您的帮助。