【问题标题】:How to fix madExcept creating temporal files in User\LocalSettings\Temp如何修复 madExcept 在 User\Local Settings\Temp 中创建临时文件
【发布时间】: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 作者是否知道 IncludeTrailingPathDelimiterChangeFileExt...(我的印象是他们不发布源代码并且从未审查过他们的代码。)
  • @downvoter 代码在非常旧的 delphi 版本上运行,因此没有路径 delim 方法。 MadExcept 也不需要像内存管理器那样依赖很多 RTL。 ChangeFileExt 在这里不合适。内存管理器。 ChangeFileExt 在这里不合适。

标签: delphi file uac temp madexcept


【解决方案1】:

看起来没有什么需要解决的。 GetTempPath API 函数正是用于获取允许程序创建临时文件的位置的函数。兼容性测试人员无法删除目录并不意味着目录应该在其他地方。这仅意味着在程序尝试时无法删除它们。可能是另一个程序(例如正在测试的程序)在其中一个目录中打开了一个文件;当文件夹中有打开的文件时,Windows 不允许删除文件夹。

问题的一个可能来源是 MadExcept 创建目录的方式。它创建它们以便它们继承其父目录的权限。如果父目录禁止删除,那么新创建的临时目录也将禁止删除。这部分指向您系统上的配置问题:GetTempPath 可能正在返回一个不存在的目录的路径。它只返回它在任何 TMP、TEMP 和 USERPROFILE 环境变量中找到的第一个值。确保这些信息准确无误是用户(而不是您的程序)的责任。

知道 MadExcept 使用GetTempPath 来发现临时目录为您提供了机会。您可以调用 SetEnvironmentVariable 来更改您的进程的 TMP 值,MadExcept 将在那里创建它的目录。 (但如果系统为临时文件指定的位置已经不起作用,那么祝你好运找到一些替代方法。)

【讨论】:

    猜你喜欢
    • 2010-11-09
    • 2020-07-02
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2011-05-19
    相关资源
    最近更新 更多