【发布时间】: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,以管理员权限运行永远不是解决方案。正是这种技巧让您避免找到解决方案。在这种情况下,解决方案似乎是要求客户的系统管理员正确配置环境。另一种解决方案是使日志和数据库目录可配置。但即便如此,配置仍然需要写在某个地方。