2011年1月23日 星期日

應用程式正常初始 (0xc0000005) 失敗


我想很多人都見過類似上面的視窗,有些人已經把這類視窗當作是 "用 Windows 就一定會看到" 的東西,其實並不是如此,這種事情在任何一個作業系統上都會發生,只是呈現的方式不同,而且這類視窗其實是作業系統的一種自我保護機制

上週我幫我父母的電腦 (就是我之前介紹過的 MSI AE2010 AIO PC) 更新防毒軟體,當時我幫他們安裝的是 Avast! 家庭版,這套防毒軟體是免費的,又有繁體中文介面,算是很有名的免費防毒軟體,網路上的評價也不錯 [1]。原本舊版使用得好好的,可是一更新完,奇摩輸入法的 KeyKeyServer 就當掉了,出現類似上圖的視窗,不管更新該輸入法至最新版,或是整個重裝都沒有用。我不信邪,想說是不是中毒了 (畢竟這台電腦平常不是我在用),還做了系統的全機掃描,當然還是無解 .....

我在網路上找了一些網站,把裡面的解法全都試過了,還是沒用,而這台電腦的 OEM Win 7 很怪,沒有內建中文輸入法,使得奇摩輸入法變得非常重要 ..... [2],最後怎麼解決的呢 ? 所謂山不轉路轉,我把 Avast! 換成 AntiVir,就沒再發生這種事了 .....

現在我們來探討一下這個情況是怎麼發生的。所有的應用程式在執行時,都必須先載入記憶體 (從硬碟裡讀取並執行會慢到想殺人)。作業系統就像是一個超大的驅動程式,做為電腦硬體與應用程式之間的橋梁,它會分配一塊記憶體給該應用程式用。可是當使用者在使用電腦時,可能同時有數十個程式在運行 (不管有沒有圖形介面,總之很多程式同時在執行中),此時記憶體區塊的使用方式非常重要,圖中 "0xc0000005" 這類字串指的就是記憶體區塊的位址,而之所以出現警告,就是因為使用上出了問題,這大概可以分為兩種原因 :
  1. 不合法的記憶體使用 : 應用程式每一次向作業系統申請記憶體使用時,都會傳回一個數值,若此值是 "0",則為絕對禁止使用的 "中斷描述符表" (嗯 ... 坦白說我也不知道這是啥鬼),若該程式白目地要用,就會被作業系統擋下,跳出 "0x00000000 存取被拒" 之類的警示視窗。早期的作業系統常常因為對記憶體的管理不健全,而發生當機的慘劇,不管是 Windows 或是 Mac OS (不是 Mac OSX 喔) 都有傳出這種災情,現在已經少很多了,作業系統都會擋下這種行為並強行關閉程式。
  2. 錯誤的記憶體使用 : 這一點就比較複雜,簡單的說就是記憶體不能共用,同一個位址不能給兩個應用程式用,如果一個應用程式試圖要寫入已經被佔有的記憶體,就會被作業系統攔下。另外,也有可能是程式的 bug 讓它自己已經使用的記憶體區塊失效,使得再次進行讀寫的時候發生錯誤。這種錯誤造成的警示視窗跟上一點不同,數值並非幾乎是 0,而有可能是其他的數字或字母,因為那代表該錯誤使用的記憶體位址
其實這兩種原因所產生的災情都很嚴重,前者會讓系統當機,後者會讓程式異常甚至洩漏個人資料 (很多 cracker 都是在找記憶體使用的漏洞阿 .....)。由上述兩點可以看出原因大多來自程式自己的 bug,不過這種現象牽扯到作業系統內核的運作,也有可能是因為電腦中了病毒或木馬之類的惡意程式,使得系統程式被它們竄改或是加了外掛而出現異常。

我遇到的情況應該是第二種情形,不過實在有太多可能的原因 (記憶體本身有損壞或是顆粒不合也有可能 .....),所以也沒辦法一一去求證,最後把 Avast! 換掉就沒事了。依我的猜測,應該是 Avast! 的新版與奇摩輸入法會互衝,在記憶體使用上有衝突,造成奇摩輸入法每次都被強行關閉,這種情況只有廠商能解,寫信給他們八成又被踢皮球 [3],還是換掉其中一個程式最快了 .......


附註
1. AVG 也是很有名的免費防毒軟體,可是出過幾次搞爛系統的大包,所以我很不推薦這玩意。
2. 當然我可以裝微軟出的中文輸入法,可是我之前已經受微軟中文輸入法的氣太久了 ..... 奇摩輸入法明顯比較好 。啥 ? 你說新酷音 ? 別鬧了孩子,那玩意我也試過,實在無藥可救。
3. 這種牽扯到兩家廠商的事情就不用說了,一定會被推卸責任,畢竟誰想找麻煩,當然把問題怪到別人頭上。就算是自己的問題,一定也是回信要你掃毒或重灌,然後說自己那裡測試毫無問題,最後不了了之 .... 根本不要抱持任何期望 .........

4 則留言:

  1. 路過~>...<
    gta5 一直有這個問題
    終於懂了 但是還是不知道原因在哪...

    回覆刪除
    回覆
    1. 懂了但不知道原因在哪?是找不到相衝的程式?這只能你自己慢慢去試了。

      刪除
  2. Avast! 刪除不掉怎麼半????

    回覆刪除
    回覆
    1. 首先你要確定是不是跟我一樣是 Avast! 跟奇摩輸入法的互衝,如果是的話,你可以選擇用更專門的清理軟體去移除 Avast!,或是乾脆換一套輸入法。

      時至今日,奇摩輸入法停止維護很久了,Win 10 已經基本不支援,所以換掉過時的輸入法才是長久之計。關於 Win 10 輸入法可以看以下舊文:

      Windows 10 的新輸入法架構
      http://chris959.blogspot.sg/2016/07/windows-10.html

      刪除