2014-01-07 126 views
0

我有一個簡單的C#4.5.1 x64應用程序,它通過/ clr C++包裝程序調用非託管dll。應用在我的開發機器上運行良好。如果我複製到Windows Server 2008或Windows Server 2012(安裝了Framework 4.5.1),則會出現一個包裝程序無法加載的錯誤。在開發機器上運行應用程序在部署時不會運行

我已經部署的機器上安裝DependencyWalker,我得到這個:

LoadLibraryExW("MyWrapper.dll", 0x000.., LOAD_WITH_ALTERED_SEARCH_PATH) called from ... 
Loaded "MyWrapper.dll" at ... Successfully hooked module. 
Loaded "XX.dll" at ... Successfully hooked module. (Dependency for MyWrapper.dll) 
Loaded "YY.dll" at ... Successfully hooked module. (Dependency for MyWrapper.dll) 
Unloaded "MyWrapper.dll" 
Unloaded "XX.dll" 
Unloaded "YY.dll" 
LoadLibraryExW("MyWrapper.dll", 0x000.., LOAD_WITH_ALTERED_SEARCH_PATH) returned null. The specified module cannot be found. 

有誰知道爲什麼一切都被裝載卸載,然後再不能找到?

+0

您確定運行時安裝在部署機器上嗎?這可能有助於http://stackoverflow.com/questions/9052694/visual-studio-2010-msvcr-dependency-removal – dousin

+0

它看起來像包裝加載,但加載你的應用程序然後去和卸載它們。是否還有其他錯誤發生?你的代碼是什麼樣的? –

+0

@dousin .NET Framework運行時肯定已安裝。 – phil

回答

2

確保安裝了所有必需的可再分發(vcredist.exe),並部署了發佈版本。

任何非託管的c/C++ dll和C++/cli dll鏈接到msvcr。它會在開發人員機器上自動安裝Visual Studio。它必須與應用程序一起安裝在部署機器上。確保重新分配對應於您的VS版本(和服務包)的正確的vcredist.exe版本。對於vs2008,它位於%ProgramFiles%\ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages)。注意:如果使用LoadModule()加載,或者使用c#中的[DllImport(「Sample.dll」)加載方法,則依賴項步行者不會顯示缺少的dll。在這種情況下,直接在Dependency walker中打開非託管dll並檢查缺失的deps。請確保,非託管dll位於您的應用程序的搜索路徑中。

相關問題