You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

开启Windows 10 Defender实时保护时无法安装至我的文档,是否为已知特性?

Windows Defender导致Inno Setup安装出现CreateFile错误的分析与解决

嘿,这个问题确实是Windows Defender实时保护模块触发的常见兼容性场景,算不上是Defender的“官方特性”,但确实是很多开发者碰到过的扫描机制冲突问题。下面给你拆解原因和可行的解决办法:

为什么会出现这个错误?

  • Defender实时扫描的文件锁定:当实时保护开启时,Defender会在文件创建/写入的瞬间自动启动扫描。你设置了低权限安装到{userdocs}(用户文档目录),安装程序创建文件的那一刻,Defender的扫描线程可能会短暂锁定目标文件,导致Inno Setup的CreateFile调用失败——错误码2看起来是“找不到文件”,本质是文件暂时被Defender锁定无法访问。
  • 提权后仍失败的坑:即使右键选择以管理员身份运行,也会出问题。原因是提权后程序以管理员上下文运行,但{userdocs}是当前标准用户的私有目录,管理员访问这个目录时,Defender会触发更严格的扫描策略,反而更容易出现文件锁定的情况。

可行的解决办法

1. 先验证问题根源(临时操作)

临时关闭Defender的实时保护,再运行安装程序:

  • 打开Windows安全中心 → 病毒和威胁防护 → 管理设置 → 关闭“实时保护”
  • 如果错误消失,就100%确认是Defender的扫描冲突导致的,记得测试完立刻重新开启保护!

2. 修改Inno Setup脚本优化

  • 换个安装目录:把DefaultDirName改成{localappdata}\My Program,这个是用户专属的应用数据目录,Defender对这里的扫描策略更宽松,低权限下也能正常写入,不容易触发文件锁定。
  • 给文件添加跳过检查标记:在[Files]段里给安装文件加上Flags: dontcheck,让Inno Setup跳过文件存在性检查,避免因Defender锁定导致的误判:
    [Files]
    Source: "MyProg.exe"; DestDir: "{app}"; Flags: dontcheck
    
  • 加个短暂延迟:如果必须用lowest权限和用户文档目录,可以在脚本的[Code]段加个启动延迟,给Defender足够的扫描时间:
    procedure InitializeWizard;
    begin
      Sleep(1000); // 延迟1秒,让Defender完成初始扫描流程
    end;
    

3. 永久解决:给Defender加排除项

如果这个程序是你自己开发的,可以把安装目录或安装程序添加到Defender的排除列表:

  • 进入Windows安全中心 → 病毒和威胁防护 → 管理设置 → 添加或删除排除项 → 选择“文件夹”,把{userdocs}\My Program目录加进去。
  • 注意:只排除你完全信任的程序或目录,别乱加未知文件的排除项!

内容的提问来源于stack exchange,提问作者user3142056

火山引擎 最新活动