Hosted by www.Geocities.ws

進階電腦 逐一擊破Windows藍畫面

一般藍畫面的成因

出現藍畫面,通常我們名以發現是由於General Protection Fault,Fatal Exception,Invalid Page Fault等錯誤所引致.這些錯誤,成因不盡相同,但綜合而言,多數是一些軟件或硬件的不兼容及衝突所致.

1.General Protection Fault

其中一種最常見的藍畫面錯誤,就是這個GPF.出現GPF的時侯,可能是以Pop Up Windows的形式出現,未必一定有藍畫面.而這個錯誤,會令到應用中的程式出現<沒有回應>的情況.而即使用戶利用Crtl+Alt+Del打開關閉程式<沒有回應>的情況強行關閉,但亦未必
能將問題解決.

第一,所應用的程式,未作儲存,而會將資料遺失.
第二,軟件在這種情況下關閉,所佔用的記憶體定址未必就能如常釋放出來.
換言之,依然會影響到系統繼續出現錯誤,仞系統其他應用中的程式也一拼受牽連.

要解釋GPF的成因,我們就先要了解Windows本身與Win16,Win32及DOS程式之間的關係.從程式設計理論當, DOS程式與Windows程式是完全由硬件的設計上分開的.

CPU會先建立一個Virtual Machine(VM)環境.而我們常用的Windows系統便會利用這個硬件功能設置DOS VM及用來執行Windows程式的System VM.

而System VM是以所謂的系統軟件來分隔Win16及Win32,與Win32及Win32之間的程式.這解釋了何之當掉的DOS程式不會怎樣影響到其他Windows程式.但若Win16或Win32出現問題,則會令整個Windows系統當機.

在Win16的程式中,各種系統資源,記憶體及訊息等都是共用共享,所以當任何一個Win16 程式發生問題,也會令所有Win16程式無法正常運作.同時,Win16程式會在User資源及GDI資源上影響到Win32程式.

而在System VM環境下的Win32程式,則所有記憶體及各種資源宦是獨享的,而且是自行獨立作訊息處理,雖比Win16來得穩定,但由於Win32會在某些情況下影響到Shell系統的 Explorer程式,特別在不正常結束時會影響其他程式運作,令系統不當機,資料流失.

由於這個Win16及Win32相互影響干擾,會導致系統不穩定,在Windows的程式設計中,就制定了GPF,令程式之間不能侵犯對方的權利及自由(位址及資源).而一旦程式出現違規情況,就會以GPF來阻止程式繼續執行.


2.Fatal Exception Error/Fatal System Error


Fatal Ecception Error是指整個程式在執行時發生了嚴重的問題,通常是指程式並非以正常狀態執行.換言之, Windows並不能夠解讀程式發放出來的指令,而付到系統錯亂,因而出現藍畫面.

跟GPF相似,Fatal Ecception Error可以是藍畫面,可以是Pop Up Message Box,而Pop Up錯誤視窗後,可以再出現藍畫面.而在這個Message Box,用戶可以點選直接關閉程式,將程式關閉的話,理論上不會暘婚整個系統.

程式出現不正常運作,通常是程式本身受到破壞.這可能是由於不正確的安裝程序,但多數是Setup程式的設計不良,而不是用戶本身的設定錯誤.另外,也可以是記憶體出現問題與及硬碟中資料受到破壞.


常見的GPF情況

1.違規存取

Access Violation及Incalid Page Fault可以理解為違規存取.違規存取是GPF中最常見的,這是指程式使用不屬於自已的記憶體位址,侵犯了其他程式的使用限權.至於為甚麼出現,則一般都是程式本身設計有Bugs,或系統出現不穩定而令程式違規存取.

2.頁面錯誤

某個程式在執行某些應用時,除了在記憶體儲存相關的資料外,亦會利用硬碟上的Swap來作儲存.頁面錯誤(In Page Error)就是程式中某些資料因為暫時未有應用而會先儲存在硬碟的Swap上,但在讀取時無法從Swap中取回資料的話,就會產生頁面錯誤.這是系統與硬碟的問題,而不是程式本身的設計不當.

3.Stack Fault

當發出並下達指令於記憶體的數量超出系統所定下之Stack限制,就會出現Stack Fault或Stack Overflow,這通常是程式本身的特殊功能所造成.一般來說,出現GPF會產生三種破壞.
第一:發生錯誤的程式會影媎其他正在運作中程式,令其他程式出現<沒有回應>的情況,這些資料虐 會因無法儲存而遺失.

第二:出現GPD會令程式無法繼續執行,必須關閉.
第三:系統會Hang機企<System Busy>,必須將電腦重新啟動.

小結
事實上,不管是GPF企Fatal Exception Error,當出現這類問題時,就會出現所謂的藍畫面.上述所談的,是比較近乎理論方面的分析,後文所分析的將會是實際我們使用時,經常遇到的,及其解決方案.


解決方案

藍畫面這類的系統問題經常會發生,以下是編輯部將過去經驗所得而作出一個歸納.

Case 01--->
原因:
Windows同時啟動太兔程式.系紜資源降至30%以下,在執行個別程式時,記憶體及虛擬記憶體均找不到所需資料.
結果:
出現Fatal Error Exception
解決辨法:
不要同時開啟過多的程序,同時不要預載太多常駐程式.至於因為開啟太多程式而發生<異常錯誤>,嘗試將部份程式關閉,以釋放系統資源,要不然,就只有重新啟動電腦.讀者可以利用Windows本身的一個簡單監測方法.在active的視窗,中點選說明--->關於XXX, 接著就可以查看所剩下的系統資源.


Case 02--->
原因:
超頻.由於CPU速度加快了,令系統工作不穩定,特別是超外頻時,令其他周邊也一拼加速,系統更見不穩,令CPU不能讓程式正常地存取記憶體.
結果:
出現Fatal Error Exception,或執行某類程式昤,會出現dl檔案的錯誤.
解決方法:
將超頻幅度建低,或換上較大型的散熱扇,建低CPU溫度,付系統保持穩定.


Case 03--->
原因:
硬件衝突.這裡一般指驅動程式及硬件及硬件上的衝突.各個組件的IRQ,DMA等,都有可能有某些不兼容的地方,而導致藍畫面.
結果:
Fatal Exception Error, Hang機
解決方法:
要解決硬件上的衝突,一般比較困難.最常見的IRQ衝突,要留意的是主機板每條PCI槽的分配情況.在安裝時,最好將PCI裝置,在Windows完成安裝後才逐件插上主機板.同時,可以嘗試將ACPI功能Disable,在透過主機板BIOS將IRQ自行設置.一旦問題發生以後,可以嘗試轉插其他PCI,應該會有幫助.同時要留意的是,某些裝置本身是不可以與其他PCI卡分享IRQ.


Case 04--->
原因:
硬碟空間太少,或不連續區太多.
結果:
出現General Protection Error
解決方法:
經常淪理硬碟中的廢物檔,進行磁碟重組,均可將系統保持在最佳化狀態.


Case 05--->
原因:
程式中有Bugs.許多程式,在撰寫的時侯由於種種問題,會出現記憶體定址錯誤分配,佔據了其他程式的記憶位址,令系統出現問題.因此,當執行特定的應用,就會出現藍畫面.
結果:
出現General Protection Error
解決方法:
基本上,假如這一類程式或軟件屬於必須品,能夠解決的方法不多.尤其有Bugs程式可以跟Windows不兼容,也可以跟其他秤式發生衝突.但可以留意藍畫面中的錯誤碼,往往可以憑著這些錯誤碼找出源頭,例如:程式之間發生衝突,Windows藍畫面會報告那一個檔案發生了問題.


Case 06--->
原因:
DLL及OLE衝牧.幾乎所有程式都要使用特定版本的動態連接庫DLL或者OLE組件,如果在安裝某個軟件時,舊版本的DLL覆蓋了新版本的DLL,或者刪除應用程式時,刪除了其他有用的DLL檔案,崶布可能出現藍畫面.
結果:
Fatal Exception Error
解決辨法:
這個時侯,可以利用Windows本身的版本衝突管理員來查看那一個檔案出現了問題.有些時侯,可以透過複製Win98 CD碟的原始檔案來解決問題,或者從其他電腦找來適合的檔案.要不然,也可以試試利用Norton Utilities將問題解決.


小結:
以上的問題,一般性較高,通常會導致Kernel32.dll檔案出現問題,這個時侯,未必一定因伙Kernel32.dll出現問題,只不過是系統硬件及軟件的不良設定或設計所引致.

{{{實用Tips}}}
微軟網站支援
對於各雒視窗中出現的問題,我們可以利用微定網站尋求解決方案. Microsoft本身會將許多錯誤訊息,及一切有關的操作程序等,放於<微軟知識庫>之中.不過,在上網查看Microsoft網站支援的話,則需要輸入產品序列號,因此,如果是使用盜版軟件的話,則不能進入Microsoft知識庫查詢資料.


藍畫面錯誤速查

Case 01--->
藍畫面出現:
Explorer has caused an invalig page fault module Kernel32.dll

Explorer has cused an invalid page fault module Explorer.exe
問題:
系統檔Kernel21.dll受損,抉而每當Explorer啟動時,竟會構成Invalid Page Fault.
假如當系統啟動時就會出現這個錯誤訊息,就表示系統已經受到嚴重損壞.
解決方法:
1.嘗試從其他電腦複製Kernel32.dll(或Explorer.exe)檔案於問題電腦之中,存取位置是Windows\System.
2.可以嘗試修復Registry來解決.Windows ME的話,可以用<系統還原>.利1Registry Checker Tool (就是Scanreg.exe)恢復先前的Registry正常的值,應該可以解決Registry出曾的問題.
由於系統本身未必能將Windows正常啟動,因此,我們要進入DOS環境工作.在重迎啟動電腦後,按F8出現開機選單,選擇Command Promt Only,啟動最基本的開機檔,並在C:\鍵入Scanreg/restore,再選擇出事的Registry來進行還原.

Case 02--->
藍畫面出現:
Explorer caused an invalid page fault in module Shdocvw.dll

Iexplorer caused an invalid page fault in module Shdocvw.dll
問題:
應該是IE 5.0中的Histry資料夾受破壞
解決方法:
Disable<自動完成>功能:
--->控制台-Internet選項-進階-瀏覽-使用即時自動完成Web功能-取消剔號.
重開IE,再鍵入網址,沒有問題即History Folder出事,先刪除整個History資料夾,再啟動IE,應逐可以解決.IE本身會重新建立History資料夾.

Case 03--->
藍畫面出現:
ICQ caused an invalid page fault in module ICQCORE.DLL at xxxx:xxxxxxxx
問題:
這通常是因為ICQ Database版本與ICQ程式版本不同所致.因此,當將所Backup的Database Folder放回ICQ Folder之中,務必要先執行ICQ Database Converter程式.其實在升級ICQ時,很多時間都會導致ICQ出現,而且,新版本的ICQ耗用資料更多,除非你有試用新版本的新功能,否則,升級ICQ未必真的是好事.

Case 04--->
藍畫面出現:
_DELIS caused a general protection fault in module _ISDEL.EXE at ......
問題:
這是防毒軟件安裝程式的衝突所致.
解決方法:
確定軟件來源沒有問題,就把防毒軟件關閉,再安裝指定軟件._DELIS是負責刪除安裝軟件後的所有暫時檔,屬於Install Shield其中一個指令.我們安裝軟件時,Setip程式都會將檔案暫時解壓至Windows Temp資料夾中,讓安裝程式將有關檔案複製至系統當中.

Case 05--->
藍畫面出現:
Msimn caused an invalid page fault in module Msoe.dll

Msdimn cause an invalid page fault in module "unknown"

Msimn caused an invalid page fault in module Directdb.dll

Msimn caused exception C000006h in module Directdb.dll

Msimn caused an invalid page fault in module directlydb.dll at xxx...

Msimn caused an invalid page fault in modu;e kernel32.dll
問題:
Msimn基本上都是屬於Outlook Express的問題,出現的原因甚多,可能是因為設定郵件規則而令程式出現邏輯錯亂,也布可能是因為Database檔案受損.就以郵件規則為例,若其中一個郵件本身是下載後才能進行Filter但同時又選擇<不要從伺服器下載>或是<從伺服器刪除>,換言之,伺服器跟本沒有郵件,Outlook Express就不能執行<不要從伺服器下載>或是<從伺服器刪除>這些選項.因此,類似的設定由於有邏輯錯誤,只會令到程式計算出錯.另外,與module directdb.dll有關的錯誤,則應該屬於Outlook Express database檔受到破壞所致.
解決方法:
1.留意Outlook Express的郵件規定的設定
2.Folder.dbx是Outlook Express的Database,刪除這個資料夾,應該可以解決問題.系統會在下次啟動Outlook Express時,會重新建立Folder.dbx.
要是這些方法也行不通,由於Outlook Express屬於IE及Windows的核心部分之一,重裝Windows會是最快的解決方法.


Case 06--->
藍畫面出現:
Rundll32這舍程式執行無效,即將關閉.....

Rundll32 caused a general protection fault in module Mmsystem.dll....
問題:
一般來說,有可能是因為System.ini缺少了一行drivers=mmsystem.dll所致.
解決方法:
1.在System.ini加上相關的指令.
--->利用記事本打開System.ini,在[Boot]下加入ddrivers=mmsystem.dll
2.直接於開始-執行中鍵入msconfig,並於System.ini中開啟[Boot]資料夾,
加上:drivers=mmsystem.dll


Case 07--->
藍畫面出現:
A fatal Exception 0E has occured at 0028:C00082CD in VxD(01) +000072CD
問題:
可以是顯示卡驅動程式與作業系統不相容引起
解決方法:
有必要找最新驅動程式來更新,因為廠方經常都會推出新版本的驅動程式,供用戶下載,最大的作用是將一些本來存在的Bugs除去.


結語

藍畫面,General Protection Fault,Fault Exception Error等,都划是Windows中經常遇到的問題.打從Windows3.1開始就有,就算今天最新的Windows,一樣經常出現諡類錯誤訊息.但要留意的是,並不一定每一個錯誤訊息,就代表是特定的程式,軟件或硬件所引起的.換言之,即使是出現相同的錯誤訊息,也可能是因為不同的衝突所引致,亦即發生不同情況,有時亦只會顯示相同的錯誤 訊息.當遇到這類問題時,便要細心查看問題所在並將之解決.

1