问题现象:对于那些链接目标已经不存在的程序快捷方式,不管右键单击还是按键盘上的删除键,资源管理器都会停止响应相当长一段时间,然后才弹出右键菜单或确认删除的对话框。

这个问题已经出现好几个月了,实在是让我忍耐了几个月,每次遇到都要抓狂。起先以为是Vista的BUG,但在别人电脑上也从没遇到,应该是安装的某个程序有兼容性问题。

使 用过Process Monitor来进行注册表和文件访问的监视,看哪个模块或注册表键值出了问题。发现出现该问题时,Explorer.exe每隔一秒钟试图访问一次不存 在的目标程序路径,发生“名称未找到”的失败访问,一共持续了十多秒(如图),没有其他什么线索:

1

而 且由于Explorer.exe随着用户的一举一动在频繁的访问各处注册表和文件,要在没有线索的情况下找出访问哪个注册表键值或文件时响应缓慢很难,之 前几次尝试找出真凶,都无功而返。很多人遇到这种问题可能想要重装系统,但我认为这实在是下下策,不是在解决问题,而是在逃避问题。

今 天,删除快速启动栏中残留QQ音乐的快捷方式时,又遇到老问题,我决定再试一次。还是打开Process Monitor进行监视,发现在上述现象发生前夕,Explorer.exe访问了MacDrive、WinRAR、Restorator等的外壳扩展模 块dll,经过逐个筛查,他们的嫌疑都被排除,其余就没有什么可疑项目了。问题模块究竟深藏何处?

偶然双击到访问QQMusic.exe发生“名称未找到”错误时的记录,打开了事件属性对话框,在那里看到“堆栈”选项卡。线索会不会在这里?

Process Monitor中的“堆栈”选项卡记录了事件发生时,执行任务的线程的堆栈状态,包括堆栈中每个帧的模块路径、内存地址,其中内核模式(Kernel- mode)的帧在前面标注“K”,用户模式(User-mode)的帧标注“U”。双击某个条目,可查看该模块的文件路径、文件描述、版本号和公司信息:

7

具体到本次访问QQMusic.exe时发生的“名称未找到”事件,堆栈列表中大都是Windows自身常见的系统文件,只有一个CmdLineExt.dll没见过。

2

查看其属性发现并非微软出品,而是Sony DADC Austria AG.,十分可疑。找到该文件所在位置,查看文件属性,发现带有Sony的数字签名,应该不是病毒,上网搜索才知道,原来它属于索尼securom ROM的版权保护组件,根据介绍来看应该是之前安装某个游戏的时候进驻我的系统的。网上还说“它已被证实对很多系统造成严重的性能问题”,看来罪魁祸首十有八九就是它。

由于这是一个dll文件,可能已通过regsvr32注册的方式注册到系统中,直接删除文件的话,可能导致系统中留有残留信息。因此首先使用regsvr32 /u 命令尝试反注册它。果然提示卸载成功:

6

然后就要删除它,可是提示文件正在被占用。

5

虽然已被卸载,但Explorer要到下一次运行时才不再调用它,因此打开任务管理器,结束Explorer进程之后再次运行,终于把CmdLineExt.dll删除掉了。现在删除已经无效的QQMusic快捷方式,迅速弹出确认删除对话框,问题果然解决了!

遇到此问题的操作系统为Windows Vista,不清楚在其他系统下是否也会遇到类似情况,如果不存在的话,那可能是SecuROM与Vista的兼容性问题。