Я хочу расширить свой системный путь поиска, не добавляя новые каталоги в %PATH%
, мне известно о записи в реестре путей к App Paths
что доступ к этой записи осуществляется только при использовании ShellExecuteEx
который не используется командной строкой. Это какой-нибудь механизм на windows так?
2 ответа
Насколько я знаю, пути к приложению нельзя использовать для пути поиска, но вы можете задать отдельный PATH для системных и пользовательских переменных среды. Поиск исполняемых файлов будет включать все элементы в обоих.
Если длина системного PATH является проблемой, вы можете сократить ее, определив другую переменную среды и сославшись на нее, например:
Создать переменную среды PF32 со значением Program File (x86)
В PATH C:\Program Files (x86)\Intel затем сокращается до % PF32%\Intel.
Вместо того, чтобы добавлять к пути, я часто пишу короткий пакетный файл, который устанавливает переменные среды для специальных приложений, которые излишне расширяют путь (или добавляют конфликтующие переменные среды).
Вот пример (run-winvile.bat
), который дает доступ из командной строки к программе с графическим интерфейсом, которой нет в PATH
. Он использует setlocal
для ограничения области видимости измененной среды:
@echo off
setlocal
set WINVILE_DIR="C:\Program Files (x86)\VI Like Emacs\bin"
cd %WINVILE_DIR%
IF ERRORLEVEL 1 goto :finish
set WINVILE_EXE=WinVile-wide-ole.exe
if exist %WINVILE_EXE% start %WINVILE_EXE% %1 %2 %3 %4 %5 %6 %7 %8 %9
:finish
endlocal
Этот пример избавляет от некоторых конфликтующих имен в PATH
:
@echo off
setlocal
rem trim path to get rid of cygwin
set PATH=C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;C:\com
rem add PERL for vile's builds
set PATH=%PATH%;c:\perl\5.8.5\bin;c:\perl\5.8.5\bin\mswin32-x86-multi-thread
call "c:\program files (x86)\microsoft visual studio 9.0\vc/vcvarsall.bat" %1
shift
run-winvile %*
endlocal