【问题标题】:DLL Search Path only partially searched仅部分搜索 DLL 搜索路径
【发布时间】:2011-01-20 20:29:44
【问题描述】:

我刚刚设置了一台速度更快的新计算机作为我的开发站。当我运行我正在使用 Delphi 6 Pro 开发的应用程序时,我遇到了一个 DLL not start found 的问题,但我认为问题不在于 Delphi。请记住,就我的旧计算机上的目录和工具而言,我的设置完全相同,并且在那台计算机上,DLL 在运行时找到,没有失败。症状似乎是只搜索我的 PATH 环境变量中的一些目录,而最近添加的目录没有。我已经尝试将包含丢失 DLL 的目录放在当前用户 PATH 中,然后在系统 PATH 中,但仍然找不到该 DLL。

以下是一些事实:

  • 如果我运行命令行窗口并查询 PATH,则 DLL 的正确路径确实出现在 PATH 环境变量中。

  • 如果我将 DLL 放在类似于 Windows 主目录的目录中,它会在运行时找到。

  • 如果我使用 Unix 风格的“whereis”实用程序表单 flounder.com,它确实会在 PATH 中找到 DLL

  • 我在运行时使用(现在是 Microsoft 的 SysInternals)进程监视器实用程序监视程序,因此我可以监视系统搜索 DLL。系统确实在路径中的 10 个子目录中搜索了 7 个,但由于某种原因,正如我上面所说的,忽略了其中的 3 个。请注意,我知道从路径中删除了无效目录,但我进行了三次检查,它们确实是有效目录。

  • 最后我创建了一个 C:\DUMMY 目录并将该目录添加到 PATH 环境变量中,当我检查进程监视器时,也从未搜索过该目录。

这是我从未见过的非常奇怪的行为。就好像在对旧 PATH 进行某些修改之前存在一个幽灵副本,系统在搜索 DLL 时正在使用它。

有人有解决方案或诊断想法吗?

谢谢。

【问题讨论】:

  • 你是怎么改路径的?
  • 最简单的解决方案,如果路径被缓存,就是重新启动机器。我们当然可以找出问题所在,但值得付出努力吗?

标签: delphi search dll path environment


【解决方案1】:

通过删除不必要的路径来缩短 PATH 变量,仅用于测试。在安装了许多喜欢修改 PATH 的软件后,我看到 PATH 变得太大。虽然 PATH 变量包含所有有效路径,但最后的路径太多了,不会被搜索到。

【讨论】:

    【解决方案2】:

    我昨天遇到了这个问题,我用过:

    SetDLLDirectory(DirectoryPath:PWideChar)
    

    这解决了它,显然只是基于 NT 的操作系统。

    另外,我会检查以确保您没有遗漏分号; (或错误地将其输入为冒号 :) 从列表中的路径名之一。

    【讨论】:

    • 如果操作系统因为找不到所需的 DLL 而无法加载程序,那么该功能将无济于事。程序需要开始运行才能调用它。
    • 说得好。我当然使用动态加载 dll 的
    【解决方案3】:

    尝试检查子目录 7 或 8 是否不正确(非法路径)。
    如果发现非法条目,我已经看到搜索停止的示例。

    【讨论】:

      【解决方案4】:

      确保您正在更改系统 PATH 变量(使用控制面板),然后您将完全重新启动任何进程。如果您要运行 Delphi,更改路径,然后在调试器中运行应用程序,那么将看不到新路径,因为它将从启动过程中继承 PATH,它仍然具有旧路径。您应该重新启动 Delphi 才能看到新路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-09
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 2012-06-07
        • 2011-04-19
        • 2012-01-01
        • 1970-01-01
        相关资源
        最近更新 更多