DLL搜索路径仅部分搜索

时间:2010-02-25 04:06:58

标签: delphi search dll path environment

我刚刚建立了一台新的更快的计算机作为我的开发站。当我运行一个应用程序时,我遇到了一个DLL无法启动的问题我正在使用Delphi 6 Pro,但我不认为问题出在Delphi上。请记住,我对旧计算机上的目录和工具具有完全相同的设置,并且在该计算机上,DLL在运行时即可找到。症状似乎是我的PATH环境变量中只有一些目录被搜索,而最近添加的目录则没有。我已经尝试将包含缺少的DLL的diretory放在当前用户PATH中,然后在系统PATH中,仍然找不到DLL。

以下是一些事实:

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

  • 如果我把DLL放在像Windows主目录这样的目录中,它会在运行时找到。

  • 如果我使用Unix风格“whereis”utilty形式flounder.com它确实在PATH中找到了DLL

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

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

这是我以前从未见过的奇怪行为。就像在对系统在搜索DLL时使用的某些修改之前存在旧PATH的虚件副本一样。

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

感谢。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

通过删除不必要的路径来缩短PATH变量,仅用于测试。我已经看到在安装了许多喜欢修改PATH的软件后,PATH变得太大了。尽管PATH变量包含所有有效路径,但由于篇幅太多,因此不会搜索末尾的路径。

答案 2 :(得分:1)

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

SetDLLDirectory(DirectoryPath:PWideChar)

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

另外,我会检查以确保你没有错过分号; (或者从列表中的一个路径名之间输入错误的冒号:)。

答案 3 :(得分:1)

尝试将子目录7或8的se不正确(非法路径) 我已经看到了如果找到非法条目,搜索停止的示例。