2009-11-24 86 views
1

我想加載第三方DLL,但試圖加載時出現錯誤。在Dependency Walker中打開它表明該DLL只依賴於kernel32.dll和msvcr90.dll。但是,在打開此DLL時,在Dependency Walker中出現以下錯誤:Error The Side-by-Side configuration information for [full path to the dll that I am loading] contains errors. This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem (14001).由於Visual C運行時DLL的依賴性問題,無法加載DLL

系統上存在的msvcr90.dll的唯一副本是我複製到包含第三方DLL的目錄中的一個副本。我在另一臺機器上遇到了一個非常類似的問題,並且從Microsoft安裝Visual C++ 2008 Redistributable軟件包解決了這個問題。然而,我真的需要深入到底,因爲我無法在需要運行的所有機器上安裝可再發行組件包。

我也嘗試在Visual Studio中打開第三方DLL並檢查其清單。在這裏面我可以看到,它明確地依賴於Visual C運行時庫的版本SP0:

<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> 

然而,複製該DLL的機器的問題的確切版本仍然沒有解決它。是什麼賦予了?

回答

2

好吧,我想通了。我必須包含一個Microsoft.VC90.CRT.manifest文件的副本。通常情況下,您可以從[Visual Studio 9.0安裝目錄] \ VC \ redist \ x86 \ Microsoft.VC90.CRT目錄中獲取。但是,我安裝了SP1的Visual Studio,它們的版本稍有不同。我最終從MS的可再發行組件包中提取適當的文件。很明顯,如果我有另一個第三方DLL依賴於不同版本的msvcr90.dll,我會遇到麻煩。我想這就是爲什麼微軟首先創建了並排的東西。

在短(在未來任何可能的Google),你有兩個選擇:

  • 安裝Visual C++ 2008 再發行組件包(只是谷歌 這個詞,你會發現它)
  • 或手動複製所需的DLL 到包括.manifest的文件
+0

您的應用程序目錄 如果您的應用程序創建一個安裝程序,然後(取決於我你使用的nstaller創建工具),它應該自動引入合適的dll或使用正確的合併模塊。這通常比手動複製dll更容易出錯,這可能與Windows SxS(並行)安裝衝突。 另一種替代方法是靜態鏈接運行時,儘管這可能並不總是實用。 – 2009-11-24 22:41:03

+0

謝謝,這實際上可能是比我更正確的答案。我將研究與我的安裝系統一起打包合併模塊的過程。到目前爲止,該軟件已被xcopy部署,這在一些配置中很不錯。 – Jason 2009-11-25 20:45:20