阿多

對于本本用戶來說,有時在使用本本時,會出現一些奇怪的問題,例如程序無法啟動、音視頻無法播放、頻繁彈出錯誤提示窗口等問題。這讓用戶感到迷茫,于是使出重裝系統的“大招”來讓本本恢復正常狀態。實際上,上述情況多半跟系統組件異常有關。不管是Windows自身還是第三方軟件,都提供了功能各異的控件(例如DLL、OCX等類型),來實現不同的功能。如果因為各種原因,造成某些控件注冊信息丟失,就會導致各種奇怪的故障。例如系統彈出“XXX.DLL文件尚未注冊,程序無法正常啟動”的提示信息,往往讓初學者一頭霧水。
掌握Regsvr32的使用方法
其實,只要熟練掌握了“Regsvr32.exe”命令,上述問題就會迎刃而解。該命令其實是Windows系統提供的一個實用工具,主要功能是用來注冊或者卸載系統控件。Regsvr32以命令行方式運行,其基本語法為“Regsvr32 [/s] [/n] [/i[:cmdline]] dllname”。其中的“/u”參數表示反注冊DLL文件,用來卸載安裝的控件。“/s”參數表示使用安靜方式,在目標DLL文件注冊/反注冊成功后不顯示提示信息。“/i”參數表示調用DllInstall函數并把可選參數[cmdline]傳給它。“/n”參數表示不調用DllRegisterServer,該參數必須和“/i”參數一起使用。“dllname”參數表示具體的DLL文件。
未帶任何參數,直接在Regsvr32命令后跟隨DLL文件,可以執行DLL注冊操作。例如,在Windows中如果由于系統故障或者人為原因,使某個程序的控件注冊信息丟失,導致無法正常運行該程序。可以在“開始→運行”中輸入“Regsvr32 xxx.dll”命令,完成對應控件注冊動作,這里的“xxx.dll”為目標DLL文件。當然,如果注冊第三方的動態鏈接庫,需要提供其完整路徑,例如“Regsvr32 e:\software\xxx.dll”等。
注意,文件的路徑信息中不能包含中文。當您想卸載某個控件時,只需使用“/u”參數即可,例如,系統自帶FSO對象(File System Object,文件系統對象),其對應的控件為“Scrrun.dll”文件,該DLL文件存在于系統文件夾中。在“開始”→“運行”中輸入命令“Regsvr32 /u Scrrun.dll”即可卸載FSO對象,這樣能有效抗擊腳本病毒。此外,如果您需要批量注冊指定路徑中的DLL文件,可以將Regsvr32命令和批處理命令中的For循環指令結合起來使用,大大提高注冊的效率。
如果系統因為各種原因受損的話,就需要對不同的DLL文件進行注冊,來修復各種故障。利用Regsvr 32命令手工逐一恢復比較煩瑣。可以在記事本中輸入“For %%i in (%systemroot%\system32\*.dll) do regsvr32.exe /s %%i”和“For %%i in (%systemroot%\system32\*.ocx) do regsvr32.exe /s %%i”兩行代碼,其中的“/s”參數表示不顯示操作成功信息框。然后將其另存為一個批處理文件,例如“Regdll.bat”。當運行該批處理文件時,所有的DLL和OCX文件自動注冊完成。
處理相關故障的技巧
如果遇到Regsvr32命令無法運行的情況,就說明某些系統文件受到了破壞,因為該命令的運行需要Regsvr32命令的正常運行,還需要“C:\Windows\System32”文件夾下“Kernel32.dll”“User32.dll”和“Ole32.dll”文件的支持。您可以從其他運行正常的主機中將上述文件復制到本機即可。當然,在使用Regsvr32命令時,還可能會遇到各種其他問題。
從原理上說,當使用Regsvr32.exe注冊DLL控件時,它會嘗試加載該控件并調用DLLSelfRegister函數。如果此嘗試成功,Regsvr32.exe會顯示一個指示成功的對話框。如果此嘗試失敗,Regsvr32.exe會返回一條錯誤消息。當出現“Unrecognized flag:/invalid_flag”提示時,說明在Regsvr32命令行中使用了無效的參數或開關組合。當出現“No DLL name specified”提示時,說明未指定注冊的DLL動態鏈接庫文件名。
當出現“Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found”提示時,說明目標文件不是.DLL 或.OCX文件。當出現“Dll name was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.”提示時,說明DLL動態庫文件可能未導出,或者內存中可能有損壞的 DLL動態庫文件,可以使用進程管理軟件進行檢測并中止該損壞的DLL的運行。
當出現“Dllname is not self-registerable or a corrupted version is in memory”提示信息時,說明需要調試的Dll動態庫文件不能自行注冊,需要重新提取該文件的原始版本。如果出現“OleInitialize failed (or OleUninitialize failed”提示,說明Regsvr32必須先初始化COM庫,然后才能調用所需的COM庫函數并在關閉時撤銷對該庫的初始化。如果對COM庫進行初始化或撤銷初始化的嘗試失敗,就會出現這些錯誤消息。例如,Ole32.dll文件可能已經損壞,或者其版本有誤。
為Regsvr32命令找個“好搭檔”
Regsvr32命令雖然很好用,不過對于普通用戶來說,使用命令行方式比較復雜。如果可以在視窗界面方式下輕松注冊/卸載Windows控件,無疑可以降低使用難度。有了RegMenu這款免費的綠色軟件,就可以輕松實現該要求。RegMenu能實現和資源管理器緊集成,當運行RegMenu.exe時彈出注冊窗口(圖1),可以對DLL、OCX、AX等類型的Windows控件實現關聯操作,點擊“Install”按鈕完成安裝操作。在資源管理器,打開合適的文件夾路徑,選中需要注冊的DLL等類型的文件,在其右鍵菜單上點擊“Register DLL”項,就能實現注冊操作,點擊“Unregister DLL”項,就能實現控件的卸載操作。
快速修復受損DLL文件
在有些情況下,在使用DLL文件時,我們面臨的情況卻比較復雜。例如,如果對應的DLL丟失或者誤刪除的話,就必須將其找回來然后才可以進行注冊。在網上有很多專門提供DLL文件的網站,可以幫助我們找到所需的DLL文件,例如打開網址“http://www.zhaodll.com”,在搜索欄中輸入DLL文件的名稱,來搜索并下載該DLL文件,如果記不清DLL文件的具體名稱,可以按照DLL文件的首個字母來搜尋。
此外,如果相應的DLL文件因為各種原因受損的話,就會導致系統出現各種奇怪的故障。例如,無法瀏覽器無法正常打開頁面、播放器無法播放視頻等等。因為DLL文件本身出現問題,對其進行注冊或者卸載就變得無濟于事。使用DLLErrorsFix這款工具,就可以讓您輕松快捷的修復受損的DLL文件,恢復系統的活力。在DLLErrorsFix主界面(圖2)左側點擊“修復Dll錯誤”按鈕,在窗口右側點擊“開始掃描”按鈕,DLLErrorsFix即開始對系統進行全面掃描,來尋找哪些DLL文件出現問題。當掃描完畢,點擊“立即修復錯誤”按鈕,就可以解決上述問題了。當然,DLLErrorsFix還提供了恢復功能,在每次修復前自動備份系統狀態信息,如果發現修復有誤的話,可以點擊“救援”按鈕,按照具體的時間選擇備份項目,點擊“修復”按鈕,將系統恢復到修復之前的狀態。