为什么Windows Defender延迟了我们软件的启动



我正在努力帮助SuperCollider社区尝试并了解如何防止Windows Defender在最新的Windows 10上延迟执行其中一个可执行文件。

github的原始问题可以在github上找到。

以下是测试用例:

  1. 下载适用于Windows x64(3.10.3)的最新版本的SuperCollider

  2. 安装

  3. 重新启动计算机

  4. 打开"cmd"并启动scsynth.exe

cd "Program FilesSuperCollider-3.10.3"
scsynth.exe -u 57110

你必须等待50到60秒才能看到scsynth输出,它应该以之类的东西开始

Device options:
- MME : Mappeur de sons Microsoft - Input   (device #0 with 2 ins 0 outs)
[...]
SuperCollider 3 server ready.
  1. 请注意,如果退出scsynth.exe并再次运行命令,scsynth.exe将立即启动,不会延迟

  2. 现在将scsynth.exe进程放入Windows Defender排除列表(有关如何访问此排除列表的信息,请参阅本文)

  3. 重新启动

  4. 打开"cmd"并启动scsynth.exe

cd "Program FilesSuperCollider-3.10.3"
scsynth.exe -u 57110

现在scsynth.exe马上开始。

这种行为始于添加Windows Defender第一眼阻止功能。

它给SuperCollider Windows用户带来了很多问题。

有人能帮我们绕过这个问题吗?

我想你期待微软在这里给出一个真正的答案,但这可能会在评论中丢失,这可能对SC用户来说足够有用,可以注册为答案,所以:

经过更多的实践经验,当您从非系统位置运行SC时会发生什么(即,不要安装到程序文件,也许也不要安装到系统驱动程序)稍微复杂一些。对于非系统位置,您仍然可以通过Defender将其扫描到狗,启动速度较慢,但机器启动仅一次。而如果SC安装到Program Files中,则在每次SClang进程启动时都会扫描(但不是,例如,在同一个SClang进程运行时重新编译classlib),除非手动添加Defender异常路径。

据我所知,上述内容仍然启用了第一眼阻挡,因为MS说";要禁用第一眼阻止,请关闭云提供的保护或自动提交样本"我仍然启用了这两个功能。

因此,如果你不经常重新启动电脑,只是使用暂停/恢复,如果你将SC安装到非系统位置,这就不是什么大问题。。。用于常规使用。毫无疑问,它仍然为新的SC用户提供了糟糕的开箱即用体验。


事实上,微软今天证明了上述理论有点错误。我刚刚进行了Windows更新,使我的机器重新启动,所以我完全预计下一次SC启动会再次缓慢。。。但事实并非如此!

因此,Defender似乎保留了最近使用的&扫描的位置,意味着它保存在磁盘上。所以下一个问题是什么可能会使这个缓存失效。上一次重新启动没有导致长时间扫描,只是为了Windows每月更新,但不包括Defender引擎或定义更新。因此,我认为Defender缓存可能会在一些更具体的事件中失效,而不是在任何重新启动时失效。也许有一些直接的基于时间或LRU的条目到期,但很难测试这一点,因为Defender经常会更新自己,造成混乱。

是的,在对后一个问题进行快速搜索后,Defender确实在磁盘上保留了一个持久缓存,其中包含与以前扫描有关的一些信息。

打开实时保护后,大约20-30分钟后,它会在此位置创建成百上千个文件:C: \ProgramData\Microsoft\Windows Defender \扫描\历史记录\存储

这些文件大多是1kb或2kb。在24小时的时间里,我们最终处理了大约95万个文件,占用了30 GB的空间。

顺便说一句,那些Defender历史文件太多的问题在当时(2021年5月)已经解决

此问题是当前已知的问题,修复程序将在本周四发布。MsMpEng.dll的RCA is Engineer存在一些问题,导致该文件夹中存在大量文件。受影响的发动机版本为18100.5。

但确实存在一些扫描历史信息仍保留在磁盘上的情况,这确实在很大程度上缓解了在常规使用中重新扫描SC等程序的问题,尽管在刚安装SC时并不是开箱即用的情况。


旁白:有点搞笑,但Defender扫描速度减慢似乎有时会影响微软自己的产品。

在编程解决方案领域:

据我所知,只要Windows Defender(可能还有其他A/V扫描仪)正在运行,就没有办法使Windows I/O API始终保持快速。您可以禁用A/V扫描(自担风险)。但是Mercurial使用的技巧(后来被rustup和其他工具模仿)是使用线程池来调用CloseHandle()。即使您在单个线程上执行所有文件打开和写入I/O,并且仅使用后台线程池来调用CloseHandle(),您也可以看到>写入文件的速度提高了3倍。理想情况下,任何在Windows上创建或更改几百个文件的软件都应该使用这种优化。这包括版本控制工具、安装程序和归档提取工具。有趣的事实:rustup可以在Windows上比开源和商业快速提取/复制工具更快地提取tar文件,因为它使用了这个技巧等等。我相信在Windows上的rustup实际上比在Linux上提取tar档案更快!

还有rustup开发人员在youtube上的演讲,比如这次。

相关内容

  • 没有找到相关文章

最新更新