問題現象:對于那些連結目标已經不存在的程式快捷方式,不管右鍵單擊還是按鍵盤上的删除鍵,資料總管都會停止響應相當長一段時間,然後才彈出右鍵菜單或确認删除的對話框。
這個問題已經出現好幾個月了,實在是讓我忍耐了幾個月,每次遇到都要抓狂。起先以為是Vista的BUG,但在别人電腦上也從沒遇到,應該是安裝的某個程式有相容性問題。
使 用過Process Monitor來進行系統資料庫和檔案通路的監視,看哪個子產品或系統資料庫鍵值出了問題。發現出現該問題時,Explorer.exe每隔一秒鐘試圖通路一次不存 在的目标程式路徑,發生“名稱未找到”的失敗通路,一共持續了十多秒(如圖),沒有其他什麼線索:
<a href="http://blogs.itecn.net/blogs/wbpluto/WindowsLiveWriter/887e9f034cf3_26/1.jpg"></a>
而 且由于Explorer.exe随着使用者的一舉一動在頻繁的通路各處系統資料庫和檔案,要在沒有線索的情況下找出通路哪個系統資料庫鍵值或檔案時響應緩慢很難,之 前幾次嘗試找出真兇,都無功而返。很多人遇到這種問題可能想要重裝系統,但我認為這實在是下下策,不是在解決問題,而是在逃避問題。
今 天,删除快速啟動欄中殘留QQ音樂的快捷方式時,又遇到老問題,我決定再試一次。還是打開Process Monitor進行監視,發現在上述現象發生前夕,Explorer.exe通路了MacDrive、WinRAR、Restorator等的外殼擴充模 塊dll,經過逐個篩查,他們的嫌疑都被排除,其餘就沒有什麼可疑項目了。問題子產品究竟深藏何處?
偶然輕按兩下到通路QQMusic.exe發生“名稱未找到”錯誤時的記錄,打開了事件屬性對話框,在那裡看到“堆棧”頁籤。線索會不會在這裡?
Process Monitor中的“堆棧”頁籤記錄了事件發生時,執行任務的線程的堆棧狀态,包括堆棧中每個幀的子產品路徑、記憶體位址,其中核心模式(Kernel- mode)的幀在前面标注“K”,使用者模式(User-mode)的幀标注“U”。輕按兩下某個條目,可檢視該子產品的檔案路徑、檔案描述、版本号和公司資訊:
<a href="http://blogs.itecn.net/blogs/wbpluto/WindowsLiveWriter/887e9f034cf3_26/7.jpg"></a>
具體到本次通路QQMusic.exe時發生的“名稱未找到”事件,堆棧清單中大都是Windows自身常見的系統檔案,隻有一個CmdLineExt.dll沒見過。
<a href="http://blogs.itecn.net/blogs/wbpluto/WindowsLiveWriter/887e9f034cf3_26/2.jpg"></a>
由于這是一個dll檔案,可能已認證regsvr32注冊的方式注冊到系統中,直接删除檔案的話,可能導緻系統中留有殘留資訊。是以首先使用regsvr32 /u 指令嘗試反注冊它。果然提示解除安裝成功:
<a href="http://blogs.itecn.net/blogs/wbpluto/WindowsLiveWriter/887e9f034cf3_26/6.jpg"></a>
然後就要删除它,可是提示檔案正在被占用。
<a href="http://blogs.itecn.net/blogs/wbpluto/WindowsLiveWriter/887e9f034cf3_26/5.jpg"></a>
雖然已被解除安裝,但Explorer要到下一次運作時才不再調用它,是以打開任務管理器,結束Explorer程序之後再次運作,終于把CmdLineExt.dll删除掉了。現在删除已經無效的QQMusic快捷方式,迅速彈出确認删除對話框,問題果然解決了!
遇到此問題的作業系統為Windows Vista,不清楚在其他系統下是否也會遇到類似情況,如果不存在的話,那可能是SecuROM與Vista的相容性問題。
本文轉自wbpluto 51CTO部落格,原文連結:http://blog.51cto.com/wbpluto/476738,如需轉載請自行聯系原作者