Windows 中输入一个名字就能启动程序这件事并非只依赖 PATH 环境变量。系统至少提供了四条互相独立的解析通道任一通道命中即可启动程序表格通道作用范围是否需要修改 PATHCreateProcess标准搜索顺序底层 API 级别是依赖 PATHApp Paths 注册表项ShellExecute/ShellExecuteEx级别否App Execution Aliases应用执行别名MSIX 包 / Microsoft Store 应用否当前工作目录所有调用方式否但需 cd 到目录通道一CreateProcess 的标准搜索顺序这是最底层的进程创建 API。当你调用CreateProcess且只传入文件名不含完整路径时Windows 按以下固定顺序搜索可执行文件调用进程自身所在的目录即主程序 .exe 同级目录调用进程的当前工作目录Windows 系统目录%SystemRoot%\System32Windows 目录%SystemRoot%PATH 环境变量中列出的各目录注意CreateProcess不查询注册表中的 App Paths。如果 Sysinternals 工具仅通过注册表注册而未加入 PATH直接用CreateProcess传入裸文件名是找不到它的。通道二App Paths 注册表——最关键的机制原理Windows 从 XP 开始引入了App Paths注册表项其设计初衷就是让应用程序可以被按名称启动而无需修改全局系统 PATH。注册表位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\程序名.exe HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths\程序名.exe每个子项的结构如下默认值该可执行文件的完整绝对路径例如C:\Tools\Sysinternals\procexp.exePath可选一个目录路径字符串在启动该程序时会被临时追加到该进程的 PATH 环境变量前面仅对该进程生效生效条件App Paths 的查询发生在ShellExecute/ShellExecuteExAPI 层面。当 Shell 收到一个不含路径的裸文件名时搜索顺序为当前工作目录Windows 目录Windows\System32 目录PATH 环境变量中的各目录查询 App Paths 注册表HKCU 优先然后 HKLM一旦在 App Paths 中找到匹配的子项名Shell 直接使用其默认值中记录的完整路径来启动程序——完全绕过 PATH。通道三App Execution Aliases应用执行别名——MSIX 包专属原理程序 作为 MSIX 包安装时Windows 会为包内每个可执行文件在以下目录中创建一个特殊的重解析点Reparse Point如SysinternalsSuite程序%LOCALAPPDATA%\Microsoft\WindowsApps\Microsoft.SysinternalsSuite_8wekyb3d8bbwe\这些重解析点就是App Execution Aliases。由于%LOCALAPPDATA%\Microsoft\WindowsApps这个目录本身已经在系统 PATH 中所以当你在命令行输入procexp.exe时系统遍历 PATH命中%LOCALAPPDATA%\Microsoft\WindowsApps在该目录下发现名为procexp.exe的重解析点重解析点指向 MSIX 包的安全存储位置中的真实二进制文件系统加载并执行真正的procexp.exe本质上 PATH 中有的是别名目录而不是 程序 的真实安装目录。验证方法在文件资源管理器中访问%LOCALAPPDATA%\Microsoft\WindowsApps\Microsoft.SysinternalsSuite_8wekyb3d8bbwe\你会看到所有工具的别名文件。也可以在设置 → 应用 → 高级应用设置 → 应用执行别名中查看和管理它们。通道四当前工作目录这是最简单但容易被忽视的通道。如果你cd到了 Sysinternals 工具所在的目录然后直接输入procexp.exe系统会在当前目录中找到它并执行——这不需要 PATH也不需要注册表纯粹是因为文件就在脚下。