Использование соединений в PATH

359
T.E.D.

Я пару раз замечал, что похоже, что я не могу использовать NTFS-переходы в% SystemRoot%, поместить следующий путь к файлу в моем PATH и заставить его работать для поиска DLL.

Например, если я поместил там каталог «bin» в качестве соединения и поместил его в свой% PATH%, то я могу запустить там исполняемые файлы, просто введя имя исполняемого файла в командной строке (без пути), но они немедленно выдают диалоговое окно, в котором не удается найти библиотеки DLL, которые использует исполняемый файл из того же каталога.

Если я вместо этого помещу путь каталога «bin» вендора непосредственно в% PATH%, он будет работать нормально.

Что именно здесь происходит? Есть ли для этого веская причина или это просто ошибка?

0

1 ответ на вопрос

1
Appleoddity

Вы забываете перенаправитель файловой системы .

Если программа, которую вы запускаете, является 32-битной, то c:\windows\system32молча перенаправляет на c:\windows\SysWOW64.

Вы не поместили папку bin в syswow64, и она не существует.

Не ошибка вообще. Просто стандартное поведение Windows, о котором вы должны знать.

Это очень хороший момент (поэтому я проголосовал против вас). Тем не менее, я действительно сделал именно это. В частности, существует соединение, указывающее на одну и ту же папку (которая содержит только 32-разрядные exe-файлы и библиотеки DLL) в папках% SystemRoot% \ system32 \ и% SystemRoot% \ SysWOW64 \. Я добавил * обе * из этих папок в PATH JIC. Exes можно найти таким образом, но не DLL. T.E.D. 6 лет назад 0
... мое * подозрение *, что MS отключил поиск DLL-файлов через переходы (возможно, только% SystemRoot% переходов?) для предотвращения атак ОС, но я не могу найти ничего, что говорило бы об этом. T.E.D. 6 лет назад 0