启动应用程序时,Windows 命令提示符是否会搜索 PATH 变量指定的位置以外的其他位置?

Ant*_*ony 38 windows path command-line environment-variables

我尝试了以下实验。

在开始之前,我检查了 cmd 中的 PATH 变量,它具有以下值:

Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramData\Lenovo\ReadyApps;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Calibre2\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;
Run Code Online (Sandbox Code Playgroud)

一开始,我以为cmd只在PATH变量包含的目录中寻找可执行文件,所以我随机选择了一个应用程序——winword.exe(Microsoft Word),并试图从命令行启动它:

start winword
Run Code Online (Sandbox Code Playgroud)

但令我惊讶的是,该程序启动了!我感到惊讶的原因是因为我已经在 PATH 变量中的所有目录中搜索了名为“winword”的 exe 文件,但我所有的搜索结果都是空的!

因此,我得出结论,命令提示符必须知道在 PATH 变量中指定的位置以外的地方进行搜索以查找可执行文件。

很明显,我接下来要做的是寻找“winword”可执行文件所在的精确位置。结果发现 winword.exe 位于此处:

C:\Program Files\Microsoft Office 15\root\office15
Run Code Online (Sandbox Code Playgroud)

因此给了我一个想法,也许 CMD 在执行“开始”命令时会自动查看 ProgramFiles 和 ProgramFiles(x86)(以及它们的所有子目录)?这导致我尝试启动安装在我的计算机上的另一个应用程序 Audacity,其 exe 文件位于:

C:\Program Files (x86)\Audacity
Run Code Online (Sandbox Code Playgroud)

再次令我惊讶的是,当我输入以下内容时,Audacity 未能启动:

start audacity
Run Code Online (Sandbox Code Playgroud)

在命令行。

在此处输入图片说明

然后我将包含 audacity.exe 的目录添加到 PATH:

set path=%path%;C:\Program Files (x86)\Audacity
Run Code Online (Sandbox Code Playgroud)

之后我再次尝试启动大胆:

start audacity
Run Code Online (Sandbox Code Playgroud)

好吧,毫不奇怪,Audacity 推出了。

我想知道的是命令提示符究竟在哪里寻找可执行文件?为什么即使包含它的目录不是 PATH 的一部分,winword.exe 也会启动,但同样的事情不适用于 audacity.exe?

我也尝试过其他应用程序。当我使用 start 命令时,Chrome 和 Firefox 可以工作。

更新:我正在运行 Windows 版本 6.3.9600 (Windows 8.1)

Ram*_*und 46

起初,我以为 cmd 只在 PATH 变量包含的目录中查找可执行文件,所以我随机选择了一个应用程序——winword.exe (Microsoft Word) 并尝试从命令行启动它:

winword.exe起作用的原因是存在定义了 Microsoft Word (Winword.exe) 路径的注册表项。如果安装了 Firefox.exe 和 Chrome.exe,则存在类似的密钥。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

我想知道的是命令提示符究竟在哪里寻找可执行文件?

系统路径变量、用户路径变量以及..\App Paths. 我能够确认 Audacity 在安装时不会为自己创建密钥。

当在其 lpFile 参数中使用可执行文件的名称调用 ShellExecuteEx 函数时,该函数会在多个位置查找该文件。我们建议在 App Paths 注册表子项中注册您的应用程序。这样做可以避免应用程序修改系统 PATH 环境变量的需要。

  • 当前工作目录。
  • 仅 Windows 目录(不搜索子目录)。
  • Windows\System32 目录。
  • PATH 环境变量中列出的目录。
  • 推荐:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

来源:申请注册


Lar*_*ryc 18

在命令提示符下,如果您只是输入WinWord它无法运行。

如果你输入START WinWord它运行。

Start命令在这里是关键。

当您尝试通过 start 命令执行文件时,命令提示符不会执行任何搜索。相反,它将文件名(和参数)传递给 Windows 本身(通过 ShellExecuteEx API 调用),然后它必须搜索文件的位置。它按以下顺序搜索了几个地方:

  • 当前工作目录。

  • Windows目录只(不子目录中搜索)。

  • Windows\System32目录。

  • 目录中列出的 PATH环境变量中。

  • 受到推崇的:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

WinWord位于该注册表项中。关键是不要PATH太长。

  • 请引用并引用所有来源。除非您凭记忆编写搜索顺序,否则您应该引用您的来源,其中指出了列表和搜索顺序。 (7认同)
  • 你从同一个 [文档](https://docs.microsoft.com/en-us/windows/desktop/shell/app-registration) 得到它们,其他人从它们那里得到它们。 (6认同)

Aki*_*ina 8

Windows 命令处理器 (CMD.EXE) 中的程序(当您在命令提示符中指定其模块名称而没有驱动器/路径时)可以在找到时启动:

  • 通过 PATH 环境变量(可执行文件及其同名的硬链接/软链接/快捷方式)

  • 通过 DOSKEY 别名

  • 通过来自HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths或的应用程序路径HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths(使用start命令时)

使用这些知识(尤其是最后一个),您可以方便地创建自己的别名。例如,您可以HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exe使用默认值创建C:\Program Files (x86)\Audacity\Audacity.exe并启动此应用程序,只需start au在命令提示符中键入即可。