客户正在使用我们的 dll,它正在创建一个使用开源库的子进程,最终由于调用 LoadLibraryExW() 而失败,返回的最后一个错误是 ERROR_MOD_NOT_FOUND。这发生在 WinXP 32 位上,但不在其他机器上。但是我们知道安装了正确的依赖集,甚至在同一个目录中。
所以我们很自然地想到,使用 Dependency Walker 来查找特定机器上缺少哪些依赖项。不幸的是,它没有显示任何缺失,只是一些不是库的直接依赖关系的延迟加载警告。在我使用depends.exe 的经验中,总是揭示缺少的依赖项是什么。
所以在这一点上,我已经把头发拉出来试图理解如果所有库的依赖项都存在,为什么我会得到 ERROR_MOD_NOT_FOUND ?使这台机器独一无二的唯一另一件事是它非常安全,因为它被政府使用,但如果我们遇到访问/权限问题,我预计会出现不同类型的错误代码。
我已经构建了一个小的 Win32 可执行文件,除了在所述库上调用 LoadLibraryExW() 之外什么都不做,当它从与库所在的相同目录运行时,它会在客户有问题的机器上毫无问题地加载库。
一件事是我们的产品是一个 ActiveX 插件,它启动一个子进程,子进程调用第 3 方库,第 3 方库调用有问题的 LoadLibraryExW()。所以也许它失败的原因是它正在运行的上下文(例如来自浏览器)?