我想扩展我的系统搜索路径而不向其添加新目录%PATH%
,我知道注册表项中放置的条目只有在使用命令行不使用它App Paths
时才会被访问。Windows 上是否有任何机制可以做到这一点?ShellExecuteEx
答案1
应用程序路径据我所知,不能用于搜索路径,但你能有单独的小路为系统和用户环境变量定义。可执行文件的搜索将包括两者中的所有项目。
如果长度系統小路是一个问题,您可以通过定义另一个环境变量并引用它来简化,例如
创建环境变量PF32具有价值程序文件 (x86)
在小路,C:\Program 文件 (x86)\Intel然后缩短为%PF32%\英特尔。
答案2
我经常编写一个简短的批处理文件来设置特殊应用程序的环境变量,而不是添加到路径中,这会不必要地扩展路径(或添加冲突的环境变量)。
下面是一个示例 ( run-winvile.bat
),它允许命令行访问 中没有的 GUI 程序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