我有一個作爲WCF Web服務在IIS7上運行的應用程序。它調用一個COM控件,然後這個控件加載另一個包含數據的dll。此應用程序已使用了相當長的一段時間,通常工作正常,但最近我遇到了LoadLibrary調用加載數據DLL失敗的一臺機器上的問題。但是,調用並不總是失敗,它將在IIS服務重新啓動後用於第一次調用,然後在此之後失敗。爲什麼LoadLibrary調用在第一次工作後會出現'找不到指定的模塊'失敗
數據dll與COM控件存在於同一個目錄中,並且當前目錄設置爲此目錄。我已經檢查並且當前目錄沒有被設置到另一個目錄,它對於這兩個調用都保持不變。單獨的調用是對Web服務的單獨調用,在它們之間,com控件被卸載,數據dll也一樣。
數據DLL加載正常,如果我把它放在系統目錄中或使用com目錄中的DLL的完整路徑,所以我可以解決這個問題,但我只是想知道爲什麼會發生。當我在加載模塊失敗後調用GetLastError時,正如我剛纔提到的,它只是給了我'指定的模塊找不到'錯誤。
LoadLIbrary的MSDN description表示應該搜索當前目錄,並且所有其他已安裝的工作似乎表明它通常會這樣。雖然應用程序以前曾多次在這種類型的機器上運行,但它無法啓動的機器是Windows Server 2008 R2機器。
歡迎任何想法。有沒有辦法讓LoadLibrary枚舉它正在查找的位置?
感謝,
喬丹
您如何檢查以確保當前目錄是一致的?在兩次調用之前,打印消息都是GetCurrentDirectory的結果? – tmpearce 2012-04-21 00:27:17
是的,正好我檢查當前目錄並立即在C++代碼中的LoadLibrary調用之前打印消息,並且我使用_getcwd和GetCurrentDirectory進行了檢查,並且它們都返回相同的東西... – JSoet 2012-04-23 19:02:46
由於您知道它位於哪個目錄,你可以指定完整路徑(作爲解決方法)嗎? – tmpearce 2012-04-23 19:05:44