2012-07-16 92 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。