2011-02-14 45 views
3

假設我有一個使用MSHTML的應用程序。安裝IE9測試版會更新打破我的應用程序的MSHTML。我發現IE8 dll的副本仍然存在於WinSxS文件夾中,所以也許我可以在不重新編譯我的程序的情況下使用它們? WinSxS能做到嗎?如何使用WinSxS清單重定向到較舊版本的DLL?

我已經搜索了很長時間,但無法弄清楚如何重定向加載程序使用IE8 MSHTML(它在WinSXS中)而不是IE9(它在%SYSTEMROOT%\ system32中)。任何想法/例子將不勝感激。

+2

您可以添加有關您嘗試過的信息嗎?例如,您是否嘗試將清單添加到您的應用程序中?就像這裏所描述的:http://stackoverflow.com/questions/1381028/winsxs-how-to-take-dependency-on-specific-version-of-gdiplus-dll – 2011-05-01 07:15:28

回答

1

我已經採取了不同的方法來解決這個問題。我會分享我最終做的 - 我劫持LoadLibrary並加載任何我想要的DLL:DLL file loaded twice with DLL redirection through manifest

要回答這個問題的具體標題(「使用WinSxS文件體現重定向」),我會用‘不,你不能’的基礎上與WinSxS文件(downvote如果你不同意我的很長一段時間的戰鬥回答,我很樂意看到如何做到這一點。)

1

您絕對不能使用WinSxS清單或策略重定向來強制加載不同版本的操作系統組件。雖然os組件也存儲在WinSxS存儲中,但它們不能作爲sxs程序集進行綁定,因此這種重定向是不可能的。

Groveling重定向LoadLibrary和強制加載舊版本的mshtml(或任何其他操作系統DLL)是一個非常糟糕的主意,我強烈建議不要這樣做。原因包括以下事實:較舊的DLL可能不會在所有安裝中都存在,您不可能正確掛接所有加載路徑(並因此創建一個奇怪的混合),當然,像MSHTML這樣的東西是專門用於特定方式和任何其他用途可能會導致問題 - 尤其是在安全敏感的東西,如HTML。

Martyn

相關問題