首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复在User\LocalSettings\Temp中创建临时文件的madExcept

如何修复在User\LocalSettings\Temp中创建临时文件的madExcept
EN

Stack Overflow用户
提问于 2011-09-21 21:36:24
回答 1查看 784关注 0票数 0

我使用应用程序兼容性工具包中的"Standard User Analyzer“进行了测试,它报告说我的应用程序不兼容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文件:

代码语言:javascript
复制
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允许的位置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-21 21:54:21

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

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

了解MadExcept使用GetTempPath发现临时目录给了您一个机会。您可以调用SetEnvironmentVariable来更改您的进程的TMP值,MadExcept将在那里创建它的目录。(但是,如果系统指定的临时文件位置已经不起作用,那么祝您好运,找到其他可用的位置。)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7500679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档