2010-02-25 34 views
1

我刚刚建立一个新的更快的电脑,成为我的开发站。当我运行一个应用程序时,我正在使用Delphi 6 Pro时遇到DLL未能找到问题,但我不认为问题出在Delphi上。请记住,我拥有与旧计算机上的目录和工具完全相同的设置,并且在该计算机上可以在运行时找到DLL,而且不会失败。症状似乎是我的PATH环境变量中只有一些目录正在被搜索,而最近添加的目录不是。我试图把包含缺少DLL的diretory放在当前用户PATH中,然后在系统PATH中,并且仍然无法找到DLL。DLL搜索路径只是部分搜索

这里有一些事实:

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

  • 如果我把DLL放在一个像Windows主目录的目录下,它可以在运行时找到。

  • 如果我使用Unix风格的“where is” utilty形式flounder.com它找到

  • 我监控的程序在运行时使用(是Sysinternals的微软现在的)进程监视器实用程序在路径中的DLL,所以我可以观看系统搜索DLL。系统确实在路径中的10个子目录中搜索了7个,但由于某种原因,如上所述,忽略了其中的3个。请注意,我知道无效目录被从路径中删除,但我三重检查,他们确实是有效的目录。

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

这真是奇怪的行为,我从来没有见过。就好像在对PATH进行某些修改之前,系统在搜索DLL时使用了旧PATH的副本。

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

谢谢。

+0

你怎么改变路径? – jdigital 2010-02-25 04:24:41

+0

最简单的解决方案,如果路径被缓存,就是重新启动机器。当然我们可以弄清楚这个问题,但是值得付出努力吗? – jdigital 2010-02-25 04:25:50

回答

2

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

1

昨天我这个非常问题,我用:

SetDLLDirectory(DirectoryPath:PWideChar) 

而且这个固定,基于NT OS只是表面。

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

+0

如果操作系统甚至无法加载程序,因为它找不到所需的DLL,那么该函数将无济于事。该程序需要在可以调用之前开始运行。 – 2010-02-25 15:20:30

+0

好的点好。我当然使用动态加载的DLL的 – 2010-02-25 15:46:59

1

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

3

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