查找适用于"The specified module could not be found"的 DLL

finding dll for "The specified module could not be found"

本文关键字:be found not DLL module 适用于 The specified 查找 could      更新时间:2023-10-16

我有一个32位的.Net应用程序winform,它调用C++dll。我们将该应用程序打包到安装程序中,它在至少20台左右的机器上安装并运行良好。该应用程序最初是在Win 7 x64计算机(我的)上开发并运行良好。

然而,当我在我的老板桌面(Win 7 x64)上运行它时,应用程序将不会启动。哦,是的。。。

当我尝试启动应用程序时,我会收到一个带有的JIT对话框

System.IO.FileNotFoundException:找不到指定的模块。(HRESULT:0x8007007E的异常)

当我运行依赖于boss机器上的exe时,它会说应用程序exe是x86,但所有依赖的dll都是x64,并将其标记为错误。当我根据我机器上的应用程序运行时,exe和dll都标记为x86。

这怎么会在机器之间发生变化?安装程序只是以正常方式拆包和复制,在许多其他x64机器上运行良好。。。

很自然,它只会在两个小时后的机器上坏掉,我们即将举办一场贸易展。叹气非常困惑。。。

=====================已解决==============

所以我们修复了它。找到丢失的dll有点棘手。

首先,我们犯了错误,我们运行了错误版本的依赖x64框。因此,它错误地报告该应用程序正在查找x64 dll。如果我们运行正确的版本,我想我们会更早发现这个问题。

为我们解决这个问题的是查看系统内部的过程监视器日志。它记录每一次文件访问和注册表读取。日志很快显示在Direct X 11 dll上读取失败。

事实证明,其他应用程序的前一个安装程序已经安装了DX11 dll的部分。这欺骗了我们的安装程序,它跳过了DirectX 11步骤,所以我们有一个丢失的dll。

谢谢你们的帮助!

这是一个简单的"找不到文件"类型的错误,但有一个非常尴尬的行为,即它不会告诉你什么DLL找不到。它可能是C++DLL,也可能是它可能具有的任何隐式DLL依赖项。像运行时支持DLL一样,通常会遗漏,您可以使用vcredist安装程序来部署它们。或者部署DLL的调试版本,这是不起作用的。

要获得良好的诊断,需要打开加载程序快照和调试器。在没有安装工具的机器上总是很难做到。SysInternals的ProcMon实用程序是一个很好的选择,你会看到程序在搜索DLL。尽管你会淹没在它生成的跟踪数据量中。从轨迹的底部向后工作。