我有一个在 IIS7 上作为 WCF Web 服务运行的应用程序。它调用一个 COM 控件,然后该控件加载另一个带有数据的 dll。这个应用程序已经使用了很长一段时间并且正常工作,但最近我在一台机器上遇到了一个问题,其中 LoadLibrary 调用加载数据 dll 失败。但是,调用并不总是失败,它会在 IIS 服务重新启动后的第一次调用中起作用,然后再失败。
数据dll与COM控件存在同一目录下,当前目录设置为该目录。我已经检查过,当前目录没有设置为另一个目录,两个调用都保持不变。单独的调用是对 web 服务的单独调用,在它们之间,com 控件被卸载,数据 dll 也是如此。
如果我将数据 dll 放在系统目录中或使用 com 目录中 dll 的完整路径,则数据 dll 加载正常,所以我可以解决这个问题,但我只是想知道为什么会发生这种情况。当我在加载模块失败后调用 GetLastError 时,正如我所提到的,它只会给我“找不到指定的模块”错误。
LoadLIbrary的MSDN 描述说,应该搜索当前目录,并且所有其他安装它的地方似乎都表明它通常会这样做。它发生故障的机器是 Windows Server 2008 R2 机器,尽管该应用程序之前已经在这种类型的机器上运行过很多次。
欢迎任何想法。有没有办法让 LoadLibrary 枚举它在哪里寻找?
谢谢,
乔丹