【问题标题】:DLL won't load: Module not found 0x8007007E. Not sure whats causing this dependency issueDLL 不会加载:找不到模块 0x8007007E。不确定是什么导致了这个依赖问题
【发布时间】:2015-02-12 23:51:50
【问题描述】:

DLL (my.dll) 由 Windows 时间服务加载。它有一个关联的日志,该日志使用 wevtutil im mymanfile.man 向 Windows 事件日志服务注册。

我使用 VS12 库重新构建了项目,现在在加载 my.dll 时遇到问题。它根本没有被触及 - 没有记录发生,远程调试不起作用,因为它没有被加载。

我用dependency walker查看了它并解决了大部分的依赖问题,除了一堆API_MS_WIN_*依赖,我认为这只是噪音而不是真正的根本原因。

我需要更多帮助来找出可能导致系统日志中出现“找不到指定模块 0x8007007E”错误的原因。 Windows 如何确定 DLL 不可加载?当我从 vs10 更改为 vs12 库时,可能会缺少什么?为服务(例如 w32time)加载 DLL 的 Windows 过程是什么?

【问题讨论】:

  • 如果是加载 dll 的进程,ProcessMonitor 是调试运行时 DLL 加载失败的好工具。但作为一项服务,我认为这行不通。如果您可以制作一个尝试加载您的 DLL 的小型线束应用程序(并且大概以类似的方式失败)并查看是否可以帮助您。
  • 提供具体的复制步骤,并以有一天会帮助其他人的方式表达您的问题!谢谢!
  • 启用加载程序快照是解决此问题的官方方法。但是,是的,为了方便,Process Monitor 很难被击败。
  • @MikeVine 我看过进程监视器,但我不确定如何使用它来调试我的 dll 的运行时错误。有没有可以推荐的地方的指南?非常感谢。

标签: c++


【解决方案1】:

看起来您可能缺少 C++ 运行时 DLL。

试试这个程序:http://www.dependencywalker.com

【讨论】:

  • 我用过依赖,但它已经过时了。它显示在 PATH 中可访问的库丢失。
【解决方案2】:

我发现这个问题的答案是什么:

w32time 时间服务无法加载 .dll。原因是加载顺序是:1)当前工作目录2)系统路径3)默认系统目录。

我的问题是当前工作目录不是 DLL 实际所在的位置。我需要将我的路径添加到 PATH 以便系统找到它。

解决方案只需设置 PATH = %PATH%/dir_where_dll_lives

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 2023-02-22
    • 2012-10-05
    • 2020-06-16
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多