DLL搜索路径只部分搜索
我只是设立了一台新的更快的电脑作为我的开发站。 当我运行一个应用程序时,我正在使用Delphi 6 Pro时遇到DLL未能找到问题,但我不认为问题出在Delphi上。 请记住,我拥有与旧计算机上的目录和工具完全相同的设置,并且在该计算机上可以在运行时找到DLL,而且不会失败。 症状似乎是我的PATH环境变量中只有一些目录正在被搜索,而最近添加的目录不是。 我试图把包含缺少DLL的diretory放在当前用户PATH中,然后在系统PATH中,并且仍然无法找到DLL。
以下是一些事实:
如果我运行命令窗口并查询PATH,则DLL的正确路径确实出现在PATH环境变量中。
如果我把DLL放在Windows主目录的目录下,它可以在运行时找到。
如果我使用Unix风格的“whereis”工具形式flounder.com它确实找到PATH中的DLL
我在运行时监视程序(是SysInternals现在是Microsoft的)Process Monitor实用程序,以便我可以观察系统搜索DLL。 系统确实在路径中的10个子目录中搜索了7个,但由于某种原因,如上所述,忽略了其中的3个。 请注意,我知道无效目录被从路径中删除,但我三重检查,他们确实是有效的目录。
最后,我创建了一个C: DUMMY目录,并将该目录添加到PATH环境变量中,当我检查了进程监视器时,该目录也从未被搜索过。
这真是奇怪的行为,我从来没有见过。 就好像在对PATH进行某些修改之前,系统在搜索DLL时使用了旧PATH的副本。
有人有解决方案或诊断思路吗?
谢谢。
确保您正在更改系统PATH变量(使用控制面板),然后您将完全从最新启动任何过程。 如果您要运行Delphi,请更改路径,然后在调试器中运行应用程序,然后将不会看到新路径,因为它将继承启动过程中的PATH,该启动过程仍旧有旧路径。 你应该重新启动Delphi来让它看到新的路径。
通过删除不必要的路径来缩短PATH变量,仅用于测试。 我已经看到,在安装了许多喜欢修改PATH的软件之后,PATH变得太大了。 尽管PATH变量包含所有有效路径,但由于路径太多,所以末尾的路径不会被搜索到。
如果子目录7或8不合法(非法路径),请尝试选择。
我已经看到了搜索停止的例子,如果发现一个非法的条目。