com应用程序引用了DLLS故障排除



我有一个WPF应用程序,我将其作为dll com组件构建并使用installshieldle进行安装,但是在运行我的com客户端时,我在某些依赖的dll中遇到了一些问题。

我的wpf dll引用了位于同一VS2012解决方案中的两个其他C#DLL(A& b(。

我的wpf dll已选中COM Interop选项的寄存器,并提供了运行WPF GUI应用程序的com接口。

我有一个C com客户端程序,该程序测试WPF应用程序。我遇到的问题是,我需要在客户端程序的文件夹中包含一些DLL_A的引用DLL(这是第三方图形包(,以使应用程序成功运行。我不必在本地客户端目录中包括dll_a或dll_b。

另外,com服务器DLL引用的其他(c(dll不需要在客户端目录中存在,因此很难理解。

我认为这不是WPF问题,而是仅关于COM服务器安装的问题。

我在主DLL中输出了一些调试消息,这些消息确认DLLS A& b,以及主com dll正在从安装位置运行。但是,当第三方DLL缺少本地客户端文件夹时,我会进一步的例外。

有人可以帮助我解决这个问题。我可以从安装位置成功运行客户端程序,因此可以肯定存在所有必需的组件和DLL。

谢谢。

听起来您遇到了与DLL负载路径相关的问题。客户端应用程序可以加载您的com dll,但是即使通过与com dll相同的文件夹中,您的com dll也无法加载自己的依赖关系(或依赖关系等(。这是正确的吗?

如果是这样,我相信可以通过呼叫AddDllDirectory函数来解决此问题 - 只需在加载其任何依赖项之前调用此问题,然后在完成后调用RemoveDllDirectory即可。有关更多信息,请参见LoadLibrary的文档的备注部分。

问题是由使用.NET 4.0编译的引用的DLL之一引起的,而其他引用的DLL则使用.NET 4.0客户端编译。使用.NET 4.0客户端重新编译解决了问题。

当执行应用程序作为注册的COM组件时,问题似乎就会发生,并且客户端从其他位置执行。如果将违规的DLL复制到客户端目录,则一切运行正常。

最新更新