Dynamic-Link程式庫重新導向

如果另一個應用程式是使用較新或舊版的相同 DLL 來安裝,則應用程式可以相依于共用 DLL 的特定版本,並開始失敗。 有兩種方式可確保您的應用程式使用正確的 DLL:DLL 重新導向和並存元件。 開發人員和系統管理員應該使用現有應用程式的 DLL 重新導向,因為它不需要對應用程式進行任何變更。 如果您要建立新的應用程式或更新應用程式,並想要隔離您的應用程式與潛在問題,請建立 並存元件

若要啟用整個電腦的 DLL 重新導向,您必須建立新的登錄機碼。 在HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options建立名為DevOverrideEnable的新 DWORD 機碼,並將其設定為 1。 之後,您必須重新開機電腦,才能看到效果。

若要使用 DLL 重新導向,請為您的應用程式建立 重新導向檔案 。 重新導向檔案必須命名如下: App_name.local。 例如,如果應用程式名稱Editor.exe,重新導向檔案應該命名為 Editor.exe.local。 您必須在應用程式目錄中安裝 .local 檔案。 您也必須在應用程式目錄中安裝 DLL。

重新導向檔案的內容會被忽略,但其存在會導致Windows在載入 DLL 時先檢查應用程式目錄,而不論LoadLibraryLoadLibraryEx指定的路徑為何。 如果在應用程式目錄中找不到 DLL,則這些函式會使用其一般搜尋順序。 例如,如果應用程式c:\myapp\myapp.exe使用下列路徑呼叫 LoadLibrary

c:\program files\common files\system\mydll.dll

而且,如果 c:\myapp\myapp.exe.local 和 c:\myapp\mydll.dll 都存在, LoadLibrary 就會載入c:\myapp\mydll.dll。 否則, LoadLibrary 會載入 c:\program files\common files\system\mydll.dll。

或者,如果名為 c:\myapp\myapp.exe.local 的目錄存在且包含mydll.dll, LoadLibrary 會載入c:\myapp\myapp.exe.local\mydll.dll。

如果應用程式具有資訊清單,則會忽略任何 .local 檔案。

如果您使用 DLL 重新導向,且應用程式無法存取搜尋順序中的所有磁片磁碟機和目錄, LoadLibrary 會在拒絕存取時立即停止搜尋。 (如果您未使用 DLL 重新導向, LoadLibrary 會略過無法存取的目錄,然後繼續搜尋。)

在包含應用程式的相同目錄中安裝應用程式 DLL 是個不錯的做法,即使您未使用 DLL 重新導向也一樣。 這可確保安裝應用程式不會覆寫 DLL 的其他複本,並導致其他應用程式失敗。 此外,如果您遵循這個良好的作法,其他應用程式不會覆寫 DLL 的複本,並導致您的應用程式失敗。