【发布时间】:2011-09-21 13:36:23
【问题描述】:
我使用应用程序兼容性工具包中的“标准用户分析器”进行了说明,它报告我的应用程序不兼容 UAC,因为:
“DeleteFileA:文件 (\Device\HarddiskVolume1\Documents and Settings\Administrator\Local Settings\Temp\mtgstudio.madExcept) 被拒绝 'DELETE' 访问,错误为 0x5。”
“DeleteFileA:文件 (\Device\HarddiskVolume1\Documents and Settings\Administrator\Local Settings\Temp) 被拒绝‘DELETE’访问,错误为 0x5。”
检查我找到的 madExcept.pas 文件:
function GetTempPath : AnsiString;
var arrCh : array [0..MAX_PATH] of AnsiChar;
begin
if windows.GetTempPathA(MAX_PATH, arrCh) > 0 then begin
result := arrCh;
if result <> '' then begin
CreateDirectoryA(PAnsiChar(result), nil);
if result[Length(result)] <> '\' then
result := result + '\';
result := result + KillExt(ExtractFileName(ModuleName(0))) + '.madExcept';
CreateDirectoryA(PAnsiChar(result), nil);
result := result + '\';
end;
end else
result := '';
end;
有没有一种好方法可以覆盖 madExcept 行为并将临时文件存储在 UAC 允许的位置?
【问题讨论】:
-
madExcept 在这里似乎没有做错任何事。为什么它不应该写入临时目录?我不明白为什么您的用户的临时目录是
Documents and Settings\Administrator\Local Settings\Temp。您真的以管理员身份运行吗? -
我同意大卫的观点。这看起来像是编写此类内容的正确目录。如果不在这里,那么临时文件会去哪里?
-
你的电脑权限坏了,修好你的机器,不要疯了。默认情况下,UAC 不会阻止 Temp 文件夹。
-
我想知道 madexcept 作者是否知道
IncludeTrailingPathDelimiter和ChangeFileExt...(我的印象是他们不发布源代码并且从未审查过他们的代码。) -
@downvoter 代码在非常旧的 delphi 版本上运行,因此没有路径 delim 方法。 MadExcept 也不需要像内存管理器那样依赖很多 RTL。 ChangeFileExt 在这里不合适。内存管理器。 ChangeFileExt 在这里不合适。
标签: delphi file uac temp madexcept