IIS7 で WCF Web サービスとして実行されるアプリケーションがあります。COM コントロールを呼び出し、このコントロールがデータを含む別の dll をロードします。このアプリケーションはかなり長い間使用されており、通常は正常に動作しますが、最近、あるマシンでデータ dll をロードする LoadLibrary 呼び出しが失敗するという問題に遭遇しました。ただし、呼び出しは常に失敗するとは限りません。IIS サービスが再起動された後の最初の呼び出しでは機能し、その後は失敗します。
データ dll は COM コントロールと同じディレクトリに存在し、カレント ディレクトリはこのディレクトリに設定されます。確認したところ、現在のディレクトリが別のディレクトリに設定されていません。両方の呼び出しで同じままです。個別の呼び出しは Web サービスへの個別の呼び出しであり、その間に com コントロールがアンロードされ、データ dll もアンロードされます。
データ dll は、システム ディレクトリに配置するか、com ディレクトリ内の dll へのフル パスを使用すると正常に読み込まれるため、これを回避できますが、なぜそうなるのか疑問に思っています。モジュールのロードに失敗した後に GetLastError を呼び出すと、前述のように、「指定されたモジュールが見つかりませんでした」というエラーが表示されます。
LoadLIBraryのMSDN の説明によると、現在のディレクトリを検索する必要があり、これが機能している他のすべてのインストールでは、通常は検索が行われているようです。失敗しているマシンは Windows Server 2008 R2 マシンですが、アプリケーションはこのタイプのマシンで何度も実行されています。
どんなアイデアでも大歓迎です。LoadLibrary が探している場所を列挙する方法はありますか?
ありがとう、
ジョーダン