==> 2006年12月25日 星期一 <==

RealPlayer安裝曆險記




  這兩天找了首音樂,哪知道下載來的音樂文件是RM文件!本人不大喜歡看電影, Realone 或 RealPlayer 這樣的武器不是我的常規裝備,于是興沖沖去華軍下載了個 RealPlayer來, 准備給機子加強火力。

  哪知道,一點安裝,它給我彈個錯誤對話框來,說什么:“作為受限用戶,您無足夠的windows?操作系統權限使用此程序安裝軟件,請聯系管理員尋求幫助”!我靠!它真是欺負我讀書少呢!我這個賬戶正是初始那個Administrator賬戶改名而已,本來就是管理員賬戶!我懷疑是安裝程序下載錯了,于是又跑去天空下載,一試也是這樣,不信邪,再去下載,這次到pconline,還是不行!我納悶了,難道全部都是安裝文件錯了?!于是直接跑上Real的主頁下載個最新的RealPlayer10.6簡體中文官方版……結果不想而知,倒霉的人始終倒霉……

  到了這時,我認命了,看來錯不在它,于是駕起牛車(10M寬帶)直奔百度、Google,搜索那個錯誤信息。嘩!好多人問這個問題哦!嘻嘻,看來像我一樣倒霉的不少嘛,當然,也讓我看到希望的曙光J 但當我花了兩天把百度和Google那几十頁的搜索結果看遍后,傻眼了,居然問的人多,真正解決了問題的一個都沒有……

  看來這個問題還得自己來解決了,着手還得從那個該死的安裝文件RealPlayer.exe 起,我抬來X光機(BoundsChecker),把API記錄的選項打開,對准 RealPlayer.exe,點下Program -> Start,運行到彈出錯誤對話框處,然后點確定,這時,程序的所有調用過的API及其參數、返回值全部記錄在案。在 Transcript 面板左邊我們可以看到出現錯誤的地方:



  看到沒有?注意,就是第309 行,這里就是錯誤對話框的出現地方!那在這之前,它干過什么,導致出錯呢?往上看,留意到上面第293行的RegCreateKeyExA函數的返回值有異常!正常應該返回ERROR_SUCCESS(零值) ,此時它返回是API錯誤值5!BoundsChecker的右面可以看到它的調用參數及返回值:



  我們知道 RegCreateKeyExA 是一個注冊表鍵的創建函數,第二個參數lpSubKey 正是它要創建的鍵路徑,那根鍵 hKey 是哪個呢,單看 0x80000000也不知道是哪個啊?!打開windows SDK的winreg.h,可以看到HKEY_CLASSES_ROOT 的值正是 0x80000000 !啊?!這里可是系統各種類設置及文件關聯的重地哦!好家伙!居然在這個危險的地方創建鍵值,究竟它想干什么?我們再扛出蓋茨大叔的私家手朮刀 Regedit.exe,翻到HKEY_CLASSES_ROOT\Software 一看——沒什么特別呀!看樣子它是在這里創建鍵出錯了,動手給它加上 RealNetworks 看看……在Software項上右鍵,選擇新建項——出事了!它彈出一個對話框來說:“無法寫入到注冊表項!”看來問題在這里了。我試了下用注冊表文件來進行鍵值的創建也會出現這個錯誤的,那么也就是說調用Win32API也不能在此項中進行鍵值的新建。

為什么不能寫入呢?我又在HKEY_CLASSES_ROOT的其它的項下新建項,沒事呀!上車,再奔百度……找了半天注冊表中出現的那個錯誤,漸漸的,目光落到Software的權限上,它的權限如下:



  沒錯呀,管理員權限是完全控制,自己的賬戶也是完全控制,但為什么自己不能創建鍵值呢?無奈之下,去室友Amsonl的機子上查他注冊表中的同一項,發現他的設置跟我是一樣的!

  到這里,有點山窮水盡的意味了,突然間,想到,如果我把它刪掉重建呢?有點冒險,如果不能重建就搞大發了……狠了狠心,大不了重裝!于是,把Software項導出到save.reg,然后刪除 Software項,很順利!再導入——呃?!不行!!居然彈出同一錯誤來!到這時,几乎要絕望了,但卻留意到Software項被建立了起來,但里面的項及鍵值不全!我嘗試着在Software上右鍵,新建項,不行!再看下Software的權限,發現里面各個組都沒有設置完全控制,設置了一下,再新建 ——Ok!!!!再一次導入save.reg——沒有任何提示,成功!

  馬上找出RealPlayer.exe雙擊,哈哈!終于出現安裝進度了!



  原來RealPlayer被這個Software鍵給卡死了!

  這個問題還會導致Windows Media Player10及11到最后一步時,安裝不成功的錯誤。因為這個Software項里的Windows子項中有Media Player的設置。

  最后,實際上這個鍵值錯誤是怎樣導致的,百思不得其解,因為在網上看到有些人新裝系統然后馬上裝RealPlayer也會出現這個錯誤,也就是說在新系統一開始此鍵就被鎖住了。

  補充:期間有人說裝realone的解碼器可以解決問題,但如果是本文所說的問題則裝realone的解碼器也是不能解決這個問題的,因為裝realone的解碼器還是需要讀寫此鍵值的!



0 意見: