擺脫 DLL Hell 的惡夢 – 使用動態連結程式庫重新導向

當您安裝一個程式之後,某些程式卻忽然不能運作了。這是因為兩個程式共用同一個 DLL 檔版本卻不同而產生錯誤。可能是這兩個程式對於系統目錄中的 MSVCRT.DLL 檔案版本有各自的要求。或是第一個程式升級 ActiveX® 控制項,而第二個程式也用到此控制項,但升級後的控制項與第二個程式並不完全相容。

如果這兩個程式對於公司的日常營運而言都不可或缺,則怪罪於哪一個程式實在於事無補。當務之急是讓程式趕快正常執行。這時候講「我們賠錢」與「鮑伯害我們賠錢」,都沒什麼差別了。事實上都是公司在賠錢,而您的任務就是馬上解決問題。

通常必須先決定要挽救哪一個程式。從 Windows® 2000 開始,有急救工具可協助您修復這些衝突。但這些急救工具只是暫時的解決辦法,讓系統趕快恢復正常步調,給您時間找出更長久的辦法來解決衝突。

Windows 2000 已實作一種初步的解決方案,也就是現在所謂的「動態連結程式庫重新導向」這個新名詞。若要啟用 DLL 重新導向,請建立檔案並以您要重新導向 DLL 的程式來命名,但在名稱後面加上 .local。例如,若要對 C:\Program Files\Litware Inc\Invoice.exe 套用重新導向,請建立檔案 C:\Program Files\Litware Inc\Invoice .exe.local。檔案的內容無關緊要,重要的是檔案要存在。

當程式啟用重新導向之後,該程式在嘗試載入 DLL 時會先查看本身所在的目錄,然後才會查看平常的搜尋位置。因此,以發生衝突的 MSVCRT.DLL 檔案為例,您可以在每個程式中啟用重新導向,然後在每個程式的安裝目錄中放入一份專用的 MSVCRT.DLL 複本。此後,每個程式就會收到自己的 MSVCRT.DLL 版本,也就是用來測試程式的 DLL 版本。

這項技巧的神奇之處在於就算程式以完整路徑來載入 DLL 也沒有問題。例如,假設程式嘗試載入 C:\Program Files\Common Files\Proseware Inc\taxplugin.dll。在升級到 Proseware 2.0 之後,您發現該軟體的課稅外掛程式和您的發票程式不相容。您能做的就是將一份舊版的課稅外掛程式複製到 C:\Program Files\Litware Inc\taxplugin.dll。雖然程式以完整路徑來載入課稅外掛程式,但 DLL 重新導向仍會查看目前的目錄,並使用本機覆寫來代替 Proseware Inc 目錄中的覆寫。

在 Windows XP 和 Windows Vista™ 中,DLL 重新導向的規則稍微不同,但一般原則還是一樣。除了建立 .local 檔案,您也可以建立 .local 目錄。在此情況下,就會搜尋 .local 目錄,而不是程式的安裝目錄。這可讓您對同一目錄中的多個程式套用重新導向而不會發生衝突。

請注意,您不能對含有應用程式資訊清單的程式套用重新導向,而且所謂的「已知的 DLL」也無法重新導向。(有關詳細資訊,請參閱動態連結程式庫重新導向 (英文)。)

DLL 重新導向無法讓您完全擺脫 DLL Hell,但至少有一些急救技巧可降低傷害程度,讓您有時間找出問題。

廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s