3

私の .NET 4.0 Web サービスは libeay32.dll を使用しています。この libeay32.dll は、FIPS に準拠するために /FIXED オプションを使用して VS2010 でコンパイルされています。これは、libeay32.dll が特定のアドレス (0xfb00000) に存在しない限り、ロードに失敗することを意味します。スローされる例外は次のとおりです。

System.DllNotFoundException: DLL 'some_dependent_library.dll' を読み込めません: 無効なアドレスにアクセスしようとしています。

libeay32.dll が正しいアドレスを取得することを保証する唯一の方法は、他の DLL がロードされる前に (kernel32.dll から LoadLibrary() を使用して) Main() メソッドでロードすることです。これは、私が Windows サービスと単体テストで使用して成功したアプローチです。ただし、私の Web サービスでは、LoadLibrary を Global.asax.cs の Application_Start() に配置しましたが、それでも散発的に失敗します。(私は procmon を調べました - 他の多くの DLL が最初にロードされます)

libeay32.dll が必要なアドレスを確実に取得できるようにする他の方法はありますか? アプリケーション プールの起動時に Application_Start() の前に実行できるコードはありますか?

4

0 に答える 0