DLL Search Path только частично искал - PullRequest
1 голос
/ 25 февраля 2010

Я только что установил новый, более быстрый компьютер, чтобы быть моей станцией разработки. У меня проблема с библиотекой DLL, которая не была обнаружена при запуске приложения, над которым я работаю, с использованием Delphi 6 Pro, но я не думаю, что проблема с Delphi. Имейте в виду, у меня точно такая же настройка, что и для каталогов и инструментов на моем старом компьютере, и на этом компьютере DLL всегда обнаруживается во время выполнения. Симптом, по-видимому, заключается в том, что только некоторые каталоги в моей переменной среды PATH находятся в поиске, а добавленные в последнее время - нет. Я попытался поместить директорию, которая содержит недостающую DLL в текущем пользовательском PATH, а затем в системном PATH, и DLL все еще не может быть найдена.

Вот несколько фактов:

  • В переменной среды PATH появляется правильный путь к DLL, если я запускаю командное окно и запрашиваю PATH.

  • Если я поместил DLL в каталог, подобный основному каталогу Windows, он будет найден во время выполнения.

  • Если я использую форму утилит "whereis" в стиле Unix flounder.com, она находит DLL в ПУТИ

  • Я контролировал программу во время выполнения с помощью (был SysInternals теперь Microsoft) утилиты Process Monitor, чтобы я мог наблюдать за системой, ищущей DLL. Система выполнила поиск 7 из 10 подкаталогов в пути, но по какой-то причине, как я сказал выше, проигнорировала 3 из них. Обратите внимание, я знаю, что неверные каталоги удалены из пути, но я проверил трижды, и они действительно являются действительными каталогами.

  • Наконец, я создал каталог C: \ DUMMY и добавил этот каталог в переменную среды PATH, и когда я проверял Process Monitor, этот каталог тоже никогда не просматривался.

Это действительно странное поведение, которого я никогда раньше не видел. Как будто есть призрачная копия старого PATH до того, как в него были внесены определенные изменения, которые система использует при поиске DLL.

У кого-нибудь есть решение или диагностические идеи?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 25 февраля 2010

Убедитесь, что вы изменяете системную переменную PATH (с помощью панели управления) и что затем вы запускаете любой процесс полностью с нуля. Если вы должны были запустить Delphi, измените путь, затем запустите приложение в отладчике, тогда новый путь не будет виден, потому что он унаследует PATH от процесса запуска, который все еще имеет старый. Вы должны перезапустить Delphi, чтобы увидеть новый путь.

2 голосов
/ 25 февраля 2010

Сократите переменную PATH, удалив ненужные пути, только для тестирования. Я видел, что PATH становится слишком большим после установки многих программ, которые любят изменять PATH. Хотя переменная PATH содержит все допустимые пути, поиск в конце не будет выполняться, поскольку их было слишком много.

1 голос
/ 25 февраля 2010

Попробуйте выполнить поиск se, если подкаталог 7 или 8 неисправен (неправильный путь).
Я видел примеры, когда поиск останавливается, если найдена нелегальная запись.

1 голос
/ 25 февраля 2010

У меня вчера была эта проблема, я использовал:

SetDLLDirectory(DirectoryPath:PWideChar)

И это исправлено, операционная система на базе NT только внешне.

Кроме того, я бы проверил, чтобы вы не пропустили точку с запятой; (или опечатка как двоеточие :) между одним из путей в списке.

...