解决文件被资源管理器占用无法删除的难题

当我们要删除一些文件时,系统有时会提示文件正被另一程序打开无法删除,但是很多时候又没有提示文件具体被哪个程序占用。下面笔者介绍查看占用文件的程序并将其彻底删除的方法。

情况1:文件被资源管理器占用

文件无法删除的情况大部分发生在资源管理器中,此时系统会提示文件夹或文件已在另一程序中打开,但是无法从提示中知道具体打开的程序(图1)。

此时可以启动“资源监视器”,查看“explorer.exe”进程(即资源管理器)是否加载了需要被删除的文件。如果是,则可以将该进程终止后再删除它。启动该组件后切换到“CPU”选项卡,在“名称”下勾选“explorer.exe”,接着展开下方的“关联的模块”,在“模块名”下查找,可以看到当前无法删除的“QQShellExt64.dll”,正是被“explorer.exe”进程加载的文件(图2)。

在“资源监视器”中按提示结束“explorer.exe”进程,此时再按下“Ctrl+Alt+Del”打开任务管理器,依次点击“文件→新建任务→浏览”,找到该文件并删除(图3)。最后重启“explorer.exe”进程即可。

情况2:文件被后台进程占用

一些文件无法删除是由于其正被后台系统服务或者进程所加载,因此要彻底删除该文件,就需要先找出加载该文件的进程。比如笔者有一次在试图删除“rdpwrap.dll”文件时,系统弹出文件已在“remote desktop services”中打开的提示(图4)。

但笔者在任务管理器中并没有发现名为“remote desktop services”的进程,通过名称描述大概可以知道这是一个系统服务。此时打开任务管理器,切换到“服务”,在“描述”中排查,可以知道这是名称为“TermServices”的服务(图5)。

按提示右击该服务并选择“打开服务”,找到该服务后将其“启动类型”设置为“禁用”(图6)。重启电脑,然后再删除即可。

小提示:

在“服务”组件窗口中,服务“名称”栏下对应的是任务管理器中服务的“描述”,在资源管理器提示窗口中显示的也是任务管理器的“描述”内容,需要根据描述内容找到对应的具体服务。

情况3:文件被后台驱动占用

在试图删除一些被病毒感染的.sys文件时,也经常会遇到文件无法删除的情况。比如笔者电脑中的杀毒软件排查到“C:/Windows/System32/drivers/Ababa64.sys”为病毒,但是杀毒软件无法将其删除,手动删除则提示文件被后台程序打开。其原因大多是由于该文件被后台驱动服务加载,解决的方法是找出加载服务并将其停止,之后就可以将其删除。

对于驱动服务及其加载的文件,可以借助PowerShell命令行查看,系统所有的服务均可以在注册表[hklm:/system/ControlSet001/services/]键值下看到。先以管理员身份启动PowerShell,输入并执行命令“Get-ChildItem -Path hklm:/system/ControlSet001/services/* | Out-GridView”,此时在打开的窗口中可以看到[Services]键值下的所有系统服务(图7)。

继续在图7所示的窗口中依次点击“添加标准→Property”,即添加服务属性筛选条件,接着在添加筛选条件框中输入无法删除的文件名称“Ababa64.sys”。在筛选后窗口中可以看到该文件被名为“Ababa”的服务所加载,文件的路径则为“C:/Windows/System32/drivers/Ababa64.sys”(图8)。

通过上面的排查,可以知道文件无法被删除是由于后台“Ababa”服务加载所导致的。接下来将病毒文件Ababa64.sys及加载它的系统服务删除即可。

重启并选择进入安全模式,先根据图8的提示在注册表中找到相应的键值,并将右侧的“start”值设置为4(表示将服务设置为“禁用”)。重启电脑,确定系统可以正常使用后,接着根据图8显示的路径将Ababa64.sys文件删除,再根据图8的“DisplayName”值(对应注册表中服务键值),展开注册表[HKLM:/SYSTEM/ControlSet001/Services/],将其中的“Ababa”键值删除即可。

小提示:

如果无法删除的文件是被后台系统服务占用,通过“任务管理器”即可找到服务。如果是被驱动服务占用,那么就需要在注册表[HKLM:/SYSTEM/ControlSet001/Services/]下查找,大家可以按照这个顺序依次进行排查。