无法仅在特定系统上加载DLL

时间:2018-11-09 10:15:58

标签: c# windows dll

我们必须在多台计算机上处​​理问题,主要是Windows 7 pro,但最近也出现在Windows 10 home上。 我们的软件尝试访问要使用的视频文件,位于计算机上的文件,并抛出错误:

  

无法加载DLL'EvrPresenter32.dll':指定的模块可能   找不到。 (来自HRESULT的异常:0x8007007E)   System.DllNotFoundException:无法加载DLL'EvrPresenter32.dll':   指定的模块无法找到。 (来自HRESULT的异常:   0x8007007E)

这似乎在调用函数时出现:Presentation.Windows.Controls.DirectShow.EvrPresenter.DllGetClassObject32(Guid,Guid,Object&)

但是,EvrPresenter32.dll存在于应有的软件目录中,就像在一切正常的计算机上一样。 任何视频格式(.wmv,.mp4,.avi ...)或视频访问路径都会发生这种情况。

我们尝试使用regsrv32.exe在C:\ Windows \ sysWOW64 \中手动注册.dll,但这会导致错误:

  

模块EvrPresenter32.dll加载失败。确保二进制文件是   存储在指定路径或对其进行调试以检查是否存在问题   二进制或相关的.DLL文件。指定的模块不能是   找到。

驱动程序是最新的。 系统是最新的。

可以请给我们一些提示来调查和解决此问题吗?

3 个答案:

答案 0 :(得分:0)

每当我们将DLL从一个系统移动到另一个系统时,DLL都会被阻止。因此,您遇到了这个问题。

如何解除阻止DLL:

  1. 右键单击DLL

  2. 属性>>常规

  3. 在底部,您将看到取消阻止点击。

enter image description here

有关详细说明,请参见link

答案 1 :(得分:0)

Hans Passant 11月9日在10:47

  

这是用C ++ / CLI编写的DirectShow的包装。它有一个   依赖vcruntime140.dll,很容易忽略。

在Wai Ha Lee的评论(帮助我们将msvcr120.dll简化)旁边,我们发现此DLL是Microsoft Visual C ++ 2013 Redistributable软件包的一部分。 将其安装在系统上后,我们的软件视频用法将正常工作!

请记住要从Microsoft下载的链接: https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

已添加到我们软件的先决条件...

非常感谢您的关心和帮助!

答案 2 :(得分:-1)

我无法弄清楚这个错误,它在 Windows 7 上运行良好,但在 Windows 10 上不起作用。我解决了这个问题,尽管它与缺少依赖项或运行时可再发行包无关。

问题是我必须用 upx 打包 DLL,然后它又开始工作了。

在旧的 Windows XP 操作系统上解压和编译文件的原因造成了错误的 PE 标头或错误的文件格式或其他东西,但是使用 UPX 打包它现在可以正常工作并且 DLL 小了 3 倍哈哈。

>