无法仅在特定系统上加载 DLL
Posted
技术标签:
【中文标题】无法仅在特定系统上加载 DLL【英文标题】:Unable to load DLL on specific systems only 【发布时间】:2019-04-12 21:48:21 【问题描述】:我们必须处理多台计算机上的问题,主要是 Windows 7 专业版,但最近 Windows 10 家庭版也出现了问题。 我们的软件尝试访问要使用的视频文件,该文件位于计算机上,并抛出错误:
无法加载 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 文件。指定的模块不能是 找到了。
驱动程序是最新的。 系统是最新的。
您能否给我们一些提示来调查和解决这个问题?
【问题讨论】:
“或依赖的 .DLL 文件” - 您可能想查看 Dependency Walker 以查看是否有EvrPresenter32.dll
链接到但没有链接的任何库现在。
这是 DirectShow 的包装器,用 C++/CLI 编写。它对vcruntime140.dll有依赖,容易忽略。 support.microsoft.com/en-us/help/2977003/…
@WaiHaLee :我们已经对此进行了检查,这是一个很好的调查点。可悲的是,Dependency Walker 在每个系统上显示大约 500 个缺失的 DDL,无论是否正常工作。缺少 DLL 列表之间的差异有助于发现 msvcr120.dll 可能是原因。解决问题的重要线索。感谢您的帮助。
【参考方案1】:
当我们将 DLL 从一个系统移动到另一个系统时,DLL 将被阻止。所以你遇到了这个问题。
如何解锁 DLL:
右键单击 DLL
属性>>常规
在底部你会看到解锁点击它。
详细解释见link
【讨论】:
感谢您的关注。您描述的安全部分没有出现在我们的系统上。可能因为 DLL 不只是从一个系统移动到另一个系统,而是随软件安装一起部署,所以不会被阻止。【参考方案2】:Hans Passant 11 月 9 日 10:47
这是 DirectShow 的包装器,用 C++/CLI 编写。它有一个 对vcruntime140.dll的依赖,容易忽略。
在帮助我们指控 msvcr120.dll 的 Wai Ha Lee 评论旁边,我们发现此 DLL 是 Microsoft Visual C++ 2013 Redistributable 包的一部分。 安装到系统后,我们的软件视频使用正常!
提醒从微软下载它的链接: https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
添加到我们软件的先决条件...
非常感谢您的关心和帮助!
【讨论】:
【参考方案3】:我无法弄清楚这个错误,它在 Windows 7 上运行良好,但在 Windows 10 上却无法运行。我解决了这个问题,尽管它与缺少依赖项或运行时可再发行包无关。
问题是我不得不用 upx 打包 DLL,它又开始工作了。
在旧的 Windows XP 操作系统上解压缩和编译文件的某些东西创建了错误的 PE Header 或错误的文件格式或其他东西,但是使用 UPX 打包它现在可以正常工作,并且 DLL 缩小了 3 倍哈哈。
【讨论】:
以上是关于无法仅在特定系统上加载 DLL的主要内容,如果未能解决你的问题,请参考以下文章
使用 C++ 和嵌入式单声道调用 C# DLL 时无法加载程序集系统
cryengine3无法定位程序输入点releasesrwlockexclusive于动态数据库KERNEL32.DLL上。
Http/2 站点仅在 Safari 9 上无法加载 - 在 Chrome、IE、Edge、Firefox 上加载正常
[转]System.DllNotFoundException: 无法加载 DLL“*.dll”: 内存位置访问无效。 (异常来自 HRESULT:0x800703E6)