04/13/2012 筆記
日前替堂弟拼裝了一台舊電腦,主要規格為當年單核心王者之一的 Pentium 4 3.0 GHz 加上 GeForce 5900XT 以及 1GB 的記憶體,軟體安裝方面,DR 使用一套已經非常標準化的方式處理:先用直接包含 Service Pack 3 的微軟官方安裝碟安裝 Windows XP,然後使用三秒的 Windows XP Pre-SP4 安裝更新,最後安裝必要的驅動程式與應用軟體即交件。基本上自己算是對成品很滿意,硬體效能不錯,整個系統也很乾淨,沒有什麼雜七雜八的東西。
不過 DR 在軟體安裝方面顯然忽略了一件事:就是 .NET Framework 在 Windows 上也已經算是必裝的軟體套件,所以很快的,堂弟就抱怨《英雄聯盟》(League of Legends)無法執行,搜尋了一下,原來是沒有安裝 .NET Framework 3.5 的關係(錯誤訊息為「ASSERT: LauncherLib not initialized」)
X的,就是想打電動就是了……
但這不是主要想記錄的事件,而是由於一開始沒有安裝 .NET Framework,所以也沒有處理到 .NET Framework 後續一狗票的安全性更新。於是事件來了,今天堂弟說,那台主機在關機時跑自動更新會直接重開機,接著進 Windows 就會不斷的重開機……
等到 DR 去看主機時,電腦已經是關機的狀態(應該是被強制關機了),開機後進入 Windows 並無一直重開機的情形,打開系統更新圖示,有大概十餘個更新,於是決定先一次只跑一個更新,目的是找出到底會導致重開機的更新是哪一個。就這樣,一路執行到 KB2572073「Windows Server 2003 和 Windows XP 的 Microsoft .NET Framework 2.0 Service Pack 2 安全性更新」就重開機了,並且開始身陷進 Windows 後就直接重開機的地獄……
正常模式也重開機、安全模式也重開機、「上次良好的設定」也重開機……並且正常模式重開機的時間點不一,有時是進入桌面前,有時是進入桌面後。皺著眉頭想了一段時間,後來想到「停用系統失敗時自動重新啟動」這個選項,選下去之後果然成功看到 BSOD:IRQL_NOT_LESS_OR_EQUAL。看到這個訊息,第一個想到的是記憶體,雖然事實上該訊息不見得跟記憶體有關係,而且也很快的想到這條 Kingston 1GB DDR 的記憶體絕對沒有問題,因為這條記憶體可不是隨便從櫃子裡挖出來的,而是從一台一直有在使用的主機抽出來,還用來裝過作業系統以及一狗票的軟體。
不過想到記憶體倒是產生個靈感:會不會是 Windows 一直從記憶體載入有問題的暫存導致重複性的重開機?於是 DR 將整個主機斷電再開機,就成功脫離重開機地獄了。接下來,上網搜尋更新失敗的解法,主要的建議是將 .NET Framework 2.0 整個移除再重裝,但不知怎麼的,DR 就是想把剩下的三個更新(KB2572073、KB2633880、KB2656369)直接試到好……所以這過程又出錯重開機了六、七次,最後在手動下載並執行更新檔的方式重複嘗試後,終於把剩下的更新檔成功裝完。
整個事件比較想記錄的重點是「主機斷電法」,雖然沒有詳盡的錯誤追蹤,但是在後續六、七次的重開機(BSOD)狀況中,DR 都在進入 Windows 前直接強制關機、斷電再開機,這過程中進入 Windows 後直接出現 BSOD 的狀況只發生過一次,斷電後又好了。因此推估:面對 Windows 因不明原因不斷 BSOD 的狀況,將主機斷電應該算是有效的解法。