首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LoadLibraryExW()失败,最后一个错误是ERROR_MOD_NOT_FOUND,但没有丢失依赖项?

LoadLibraryExW()失败,最后一个错误是ERROR_MOD_NOT_FOUND,但没有丢失依赖项?
EN

Stack Overflow用户
提问于 2013-05-23 04:14:43
回答 3查看 9.3K关注 0票数 7

客户正在使用我们的dll,它创建了一个使用开源库的子进程,最终由于调用LoadLibraryExW()而失败,最后返回的错误是ERROR_MOD_NOT_FOUND。这在WinXP 32位上发生,但在其他计算机上不会发生。但我们知道正确的依赖关系集已安装,甚至在相同的目录中。

因此,我们自然而然地认为,使用依赖项Walker来查找该特定机器上缺少的依赖项。不幸的是,它没有显示任何缺失,只显示了一些延迟加载警告,这些警告不是库的直接依赖项。在我使用depends.exe的经验中,总是会发现缺失的依赖是什么。

因此,在这一点上,我已经绞尽脑汁地试图理解,如果库的所有依赖项都在那里,为什么我会得到ERROR_MOD_NOT_FOUND?唯一让这台机器与众不同的是它非常安全,因为它是由政府使用的,但如果我们有访问/权限问题,我会期待不同类型的错误代码。

我已经构建了一个小的Win32可执行文件,它只在上述库上调用LoadLibraryExW(),当它从与库所在的目录相同的目录中运行时,它会在客户有问题的机器上毫无问题地加载该库。

一件事是,我们的产品是一个ActiveX插件,它启动子进程,子进程调用第三方库,第三方库有问题的LoadLibraryExW()调用。那么,它失败的原因可能是它正在运行的上下文(例如,从浏览器)?

EN

回答 3

Stack Overflow用户

发布于 2013-05-23 19:09:28

在您的应用程序上使用依赖关系遍历的Profiling选项。可能这个库试图动态解析一些API(使用LoadLibrary/GetProcAddress),而这不会在静态依赖中显示出来。

票数 4
EN

Stack Overflow用户

发布于 2019-06-20 08:25:12

最好的方法是使用加载器快照。基本上,您可以使用gflags.exe (它包含在windbg中)来启用加载器捕捉;然后,在附加调试器的情况下运行进程。加载器捕捉将使加载器能够打印出进程的dbg消息,并且它将打印故障。

代码语言:javascript
复制
gflags.exe -i yourcode.exe +sls
windbg yourcode.exe
票数 2
EN

Stack Overflow用户

发布于 2020-05-31 20:38:06

您的依赖项可能存在于系统上,但它们可能位于LoadLibraryExW()过程中不属于搜索顺序的文件夹中。SetDllDirectory()或AddDllDirectory()调用将确保在LoadLibraryExW()调用期间搜索包含依赖项的文件夹

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16700810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档