2012-07-16 99 views
0

IIS加載傳統ISAPI擴展和IIS模塊,兩者都使用具有相同名稱的DLL,但這些DLL不同(與不同版本的第三方鏈接)。到目前爲止,應該沒有問題,每個組件(擴展和模塊)駐留在它們自己的文件夾中,每個組件都有自己的DLL版本,但是當IIS啓動工作進程和擴展並且模塊被加載時,擴展會嘗試加載來自模塊文件夾的DLL。我檢查了模塊的代碼,發現使用影響整個過程的SetDllDirectory。瞧,這是問題,我說。在擺脫這個調用之後(用LoadLibraryEx替換符合我需要的DLL搜索標誌),問題依然存在。最後,我發現自己給這兩個DLL提供了獨特的名字,顯然(或不)解決了這個問題。但它不是乾淨優雅的解決方案。有沒有人有任何想法爲什麼IIS展示這樣一個奇怪的行爲?ISAPI擴展加載錯誤的DLL

運行Win2008,IIS7.5,ISAPI擴展 - 與.NET3.5第三方程序集鏈接的本機,C++,VC2010,IIS模塊 - 本地,C++,VS2010,上述有問題的DLL-C++/CLI。 一切都是64

+0

好的,官方的MSDev響應:「在同一個進程中,你不能有兩個同名的」經典「DLL,除非它們被設計爲支持SxS」 – kreuzerkrieg 2012-07-17 07:50:37

回答

0

「你不能有兩個‘經典’的同名DLL文件在同一進程,除非他們已經被設計爲支持的SxS」 它什麼這裏說的關聯:Could we have 2 DLLs with the same name being loaded in one process

EDIT001: 5年後:)這是IIS加載內容的根本原因。當工作進程在任何情況下啓動IIS模塊的東西,然後是ISAPI。因此,如果兩個使用相同的DLL(例如,這兩個具有通用的基礎結構實現),則IIS模塊將首先加載,並且ISAPI將不得不使用由模塊加載的DLL。因此,最好爲同一版本的IIS模塊和ISAPI保留共享的DLL。