微软 Azure 首席技术官(CTO)Mark Russinovich 最近在“Microsoft Developer”官方 YouTube 频道的一期视频中,再次硬核科普了 Windows 骨灰级痛点——“文件正在使用”(file is in use)报错背后的底层技术逻辑。作为 Windows 系统大牛兼 Sysinternals 套件的亲儿子,他直言这个从上世纪 90 年代延续至今的陈年老梗,到现在依然让无数普通用户和程序员抓狂。


拉辛诺维奇在视频里用大白话拆解了当 Windows 弹出拒绝删除提示时,底层系统到底在瞎忙活啥。作为 Process Explorer、Sysmon 等封神级系统工具的亲历作者,他坦言当年开发这些利器,初衷就是为了帮大家抓出那些在后台偷偷占用文件句柄的“幕后黑手”。

科技媒体指出,所谓的“句柄”(handle),其实就是软件用来调用内存、文件或系统资源的通行证。一旦某个句柄死死卡住不放,你删除文件就会报错,而这通常由三大元凶导致:第一是杀毒软件或反恶意程序正在后台疯狂扫描该文件,引发临时锁定;第二是网络共享在作祟,该文件正通过局域网被其他设备读取或写入。

第三种情况则更加隐蔽且恶心:当某个文件作为 DLL(动态链接库)被直接加载到某个程序进程中时,它可能根本不会规规矩矩地出现在 Windows 的常规句柄列表里。在这种套路下,想通过肉眼或普通手段揪出到底是哪家软件在后台偷吃这个 DLL,难度系数直接拉满。

针对前两种常规锁死,拉辛诺维奇表示用 Process Explorer 这种神器一查一个准,操作起来并不难。现在市面上也有海量第三方强力卸载软件能搞定这事:用户只需精准定位到那个占座的流氓程序或服务,直接将其一键杀掉,通常就能顺利秒删那些怎么也甩不掉的“顽固钉子户”。

不过,面对那种连工具都查不出句柄的 DLL 加载死局,强杀可能就不灵了。拉辛诺维奇在视频里支了个奇招:用户可以尝试先把这个删不掉的文件改个名字,然后再新建一个同名文件丢过去玩“狸猫换太子”。他解释称,Windows 在某些死锁状态下居然允许对文件重命名,利用这个逻辑漏洞就能轻松绕过删除拦截,进而实现文件的更新或替换。

作为《Windows Internals》黑皮书的多版作者、公认的 Windows 底层机制活化石,拉辛诺维奇的这波技术输出对开发者和硬核极客来说含金量拉满。他同时也调侃道,虽然 Windows 的文件占用和句柄锁死机制是为了数据安全和系统稳定着想,但这种动不动就弹窗报错、还不告诉是谁在占用的糟糕体验,直到今天依然是各路工程师和老网民们茶余饭后的头号槽点。