客户正在使用我们的dll,它创建了一个使用开源库的子进程,最终由于调用LoadLibraryExW()而失败,最后返回的错误是ERROR_MOD_NOT_FOUND。这在WinXP 32位上发生,但在其他计算机上不会发生。但我们知道正确的依赖关系集已安装,甚至在相同的目录中。
因此,我们自然而然地认为,使用依赖项Walker来查找该特定机器上缺少的依赖项。不幸的是,它没有显示任何缺失,只显示了一些延迟加载警告,这些警告不是库的直接依赖项。在我使用depends.exe的经验中,总是会发现缺失的依赖是什么。
因此,在这一点上,我已经绞尽脑汁地试图理解,如果库的所有依赖项都在那里,为什么我会得到ERROR_MOD_NOT_FOUND?唯一让这台机器与众不同的是它非常安全,因为它是由政府使用的,但如果我们有访问/权限问题,我会期待不同类型的错误代码。
我已经构建了一个小的Win32可执行文件,它只在上述库上调用LoadLibraryExW(),当它从与库所在的目录相同的目录中运行时,它会在客户有问题的机器上毫无问题地加载该库。
一件事是,我们的产品是一个ActiveX插件,它启动子进程,子进程调用第三方库,第三方库有问题的LoadLibraryExW()调用。那么,它失败的原因可能是它正在运行的上下文(例如,从浏览器)?
发布于 2013-05-23 19:09:28
在您的应用程序上使用依赖关系遍历的Profiling选项。可能这个库试图动态解析一些API(使用LoadLibrary/GetProcAddress),而这不会在静态依赖中显示出来。
发布于 2019-06-20 08:25:12
最好的方法是使用加载器快照。基本上,您可以使用gflags.exe (它包含在windbg中)来启用加载器捕捉;然后,在附加调试器的情况下运行进程。加载器捕捉将使加载器能够打印出进程的dbg消息,并且它将打印故障。
gflags.exe -i yourcode.exe +sls
windbg yourcode.exe
发布于 2020-05-31 20:38:06
您的依赖项可能存在于系统上,但它们可能位于LoadLibraryExW()过程中不属于搜索顺序的文件夹中。SetDllDirectory()或AddDllDirectory()调用将确保在LoadLibraryExW()调用期间搜索包含依赖项的文件夹
https://stackoverflow.com/questions/16700810
复制相似问题