微软 Azure 首席技术官(CTO)马克·拉辛诺维奇(Mark Russinovich)近日在一段发布于 “Microsoft Developer” 官方 YouTube 频道的视频中,再次解释了 Windows 系统中长期存在的“文件正在使用”(file is in use)错误背后的技术原因。 作为知名的 Windows 系统工具与 Sysinternals 套件的开发者,他表示,这一问题从上世纪 90 年代至今仍在困扰用户和开发者。
拉辛诺维奇在视频中,以简明方式说明了当 Windows 拒绝执行删除文件等操作并弹出“文件正在使用”提示时,系统究竟在做什么。 他提到,自己是 Sysmon、Process Explorer 等一系列广受欢迎的 Windows 工具的作者,而这些工具在设计之初,就为了帮助用户诊断和解决这类文件句柄相关的问题。
报道指出,“句柄”(handle)是应用程序用来引用资源的抽象标识,这些资源可以是内存块、文件,或者由其他子系统管理的对象,包括数据库或操作系统本身。 当某个句柄阻止用户删除文件时,通常可以归结为三种主要原因。 第一种情况是安全软件,例如反恶意软件或杀毒程序正在扫描该文件,扫描过程中会暂时锁定文件。 第二种情况则与网络访问有关:文件可能正在通过本地网络被其他设备使用,这些设备正在执行存储或读写操作。
第三种情况则更为棘手:当某个文件以 DLL(动态链接库)的形式被加载到某个进程中时,该文件有时不会以常规“打开句柄”的形式出现在 Windows 的句柄列表中。 在这种场景下,要确定究竟是哪一个程序正在使用该 DLL 文件,往往异常困难。
针对前两种常见情况,拉辛诺维奇表示,借助 Process Explorer 等工具,找出占用文件的进程通常相对直接。 如今也有许多第三方软件可以完成类似任务:用户只需定位到具体的应用程序或服务进程,并将其关闭,就有较高概率可以顺利删除此前一直无法删除的“顽固文件”。
然而,对于 DLL 场景,即文件以库形式被进程加载但不以普通句柄呈现的情况,即便是 Process Explorer 等工具也未必能给出明确答案。 拉辛诺维奇在视频中建议,用户可以尝试先对被阻止的文件进行重命名,然后再用同名的新文件替换它。 他指出,在某些情况下,即便文件正在被使用,Windows 仍允许对其进行重命名,这一行为有时可以绕过删除受阻的问题,从而达到更新或替换文件的目的。
作为多版《Windows Internals》合著者以及长期研究 Windows 内部机制的资深工程师,拉辛诺维奇的相关技术建议被视为对开发者和高级用户具有较高参考价值。 他也借此强调,尽管 Windows 对文件占用和句柄管理有其合理性与安全考量,但围绕“文件正在使用”这一错误信息的用户体验问题,直到今天仍然是许多用户和工程师不时抱怨的对象。
热门跟贴