IIS は従来の ISAPI 拡張機能と IIS モジュールをロードします。どちらも同じ名前の DLL を使用しますが、これらの DLL は異なります (異なるバージョンのサードパーティにリンクされています)。これまでのところ問題はないはずです。各コンポーネント (拡張機能とモジュール) は独自のフォルダーにあり、それぞれに独自のバージョンの DLL がありますが、IIS がワーカー プロセスを開始し、拡張機能とモジュールが何らかの形で読み込まれると、拡張機能はモジュールのフォルダーから DLL。モジュールのコードを調べたところ、プロセス全体に影響する SetDllDirectory の使用が見つかりました。出来上がり、これが問題です、と私は言いました。この呼び出しを取り除いた後(私のニーズに合ったDLL検索フラグを使用してLoadLibraryExに置き換えました)、問題は解決しませんでした。最後に、これらの DLL の両方に一意の名前を付けることで、明らかに問題が解決する (または解決しない) ことに気付きました。ただし、それはクリーンでエレガントなソリューションではありません。IIS がこのような奇妙な動作を示す理由を知っている人はいますか?
Win2008、IIS7.5、ISAPI 拡張機能 - ネイティブ、C++、VC2010、IIS モジュール - ネイティブ、C++、VS2010、上記の問題のある DLL - C++/CLI、.NET3.5 サード パーティ アセンブリとリンク。すべてがx64です