Openssl IIS7应用程序池可以';t加载具有固定基址的库

Openssl IIS7应用程序池可以';t加载具有固定基址的库,openssl,iis-7.5,asp.net-4.0,fips,Openssl,Iis 7.5,Asp.net 4.0,Fips,My.NET 4.0 Web服务使用libeay32.dll,它是在VS2010中使用/FIXED选项编译的,以便与FIPS兼容。这意味着libeay32.dll无法加载,除非它位于某个地址(0xfb00000)。引发的异常是: System.DllNotFoundException:无法加载DLL “some_dependent_library.dll”:尝试访问无效地址 我所知道的帮助确保libeay32.dll获得正确地址的唯一方法是在加载任何其他dll之前(使用kernel32.dll中

My.NET 4.0 Web服务使用libeay32.dll,它是在VS2010中使用/FIXED选项编译的,以便与FIPS兼容。这意味着libeay32.dll无法加载,除非它位于某个地址(0xfb00000)。引发的异常是:

System.DllNotFoundException:无法加载DLL “some_dependent_library.dll”:尝试访问无效地址

我所知道的帮助确保libeay32.dll获得正确地址的唯一方法是在加载任何其他dll之前(使用kernel32.dll中的LoadLibrary())将其加载到Main()方法中。这是我在Windows服务和单元测试中成功使用的一种方法。然而,在我的Web服务中,我将LoadLibrary放在了Global.asax.cs的应用程序_Start()中,但它仍然偶尔失败。(我已经在procmon中查找过了-很多其他DLL都是先加载的)


是否有其他方法可以确保libeay32.dll获得所需的地址?当我的应用程序池启动时,但在应用程序启动()之前,是否有代码可以运行?

您得到的windows错误代码是什么?另外,从IIS加载dll时要检查的第一件事是:应用程序池用户是否在dll上具有执行权限?谢谢您的回复,hege。是,IIS用户有权加载DLL。它偶尔工作。根据ASLR的说法,有时候,我的另一个DLL会首先随机占用所需的地址空间。(我已经用ProcMon证明了这一点)。libeay32.dll看起来像是在ProcMon中加载的,但由于0xfb00000已用完,因此它尝试在不同的地址中加载,但由于/FIXED选项,这在内部失败。