为什么在 Windows 中有些程序需要路径值,而有些程序不需要?

为什么在 Windows 中有些程序需要路径值,而有些程序不需要?

为什么当我安装作曲家在 Windows 7/8/10 上,或者一些适合 UNIX 的程序,如GNU Tar,我需要设置它们的 Path 值,如果不这样做,其他程序就无法使用它们?

答案1

我针对 Microsoft Windows 回答了这个问题。我看到这里也有一个 Linux 标签。好吧,同样的概念适用。(最后一段提到了更多 Linux 注释。)

如果程序不在 PATH 环境变量指定的目录中,则可以使用它们。但是,这有点不太方便。

例如,我经常运行 7-Zip,即使它不在路径中。因此,我不会以“7z”开头命令行,而是以以下内容开头:
"C:\Program Files\7-Zip\7z.exe"

这并不像看起来那么糟糕,因为我实际输入的内容通常更像这样:
C:\ tabPro tab7 tab7tab

(我会听一下如果有拼写错误可能会发出的哔哔声,并且在我用tab密钥进行最后一次扩展之后,我还会检查命令行的准确性,以确保它按照我想要的方式运行。)

程序可以检查您在命令行上如何引用该程序,并可以检查您当前的目录。因此,程序可能会根据其是否在 PATH 中而采取不同的行动。但是,这种情况不太可能发生。

替代解决方案:调整 PATH 环境变量以包含安装程序的目录。

另一种替代解决方案:只需将可执行文件放入 PATH 中已有的目录中即可。(但是,某些程序更复杂,因为它们可能还需要将其他文件(如 DLL 文件)复制到此类目录中;因此,对于需要通过运行“安装程序”来“安装”的程序,通常不建议使用此方法。但是,对于无需大量支持文件即可运行的简单可执行文件,这通常是可行的。)

在 Linux 中,有一些细微的差别:您只需使用“ echo ${PATH}”而不是“ echo %PATH%”,使用正斜杠而不是反斜杠,使用7za7-Zip 而不是7z.exe。如果您希望调整路径,您可以使用不同的命令,例如export,但实际上取决于您使用的 shell。)

答案2

为什么在 Windows 中有些程序需要路径值,而有些程序不需要?

为什么当我在 Windows 7/8/10 上安装 Composer 或一些适合 UNIX 的程序(如 GNU Tar)时,我需要设置它们的 Path 值,如果我不这样做,其他程序就无法使用它?

PATH 是类 Unix 操作系统、DOS、OS/2 和 Microsoft Windows 上的环境变量,用于指定可执行程序所在的一组目录。通常,每个执行进程或用户会话都有自己的 PATH 设置。

DOS、OS/2 和 Windows

某些程序可能会在安装过程中将其目录添加到 PATH 变量内容的前面,以加快搜索过程和/或覆盖 OS 命令。在 DOS 时代,习惯于在 中添加PATH {program directory};%PATH%SET PATH={program directory};%PATH%AUTOEXEC.BAT

当在命令 shell 中输入命令或程序进行系统调用来执行程序时,系统首先搜索当前工作目录,然后搜索路径,从左到右检查每个目录,查找与给定命令名匹配的可执行文件名。可执行程序的文件扩展名为EXECOM,批处理脚本的文件扩展名为BATCMD。其他可执行文件扩展名也可以在系统中注册。

Unix 和类 Unix

当用户指定命令名称或从程序进行 exec 调用时,系统将搜索$PATH,检查列表中从左到右的每个目录,查找与命令名称匹配的文件名。一旦找到,该程序将作为命令 shell 或发出命令的程序的子进程执行。

来源: PATH_(变量)

答案3

在 Windows 中,应用程序可以{HKCU|HKLM}\Software\Microsoft\Windows\CurrentVersion\App Paths在注册表中注册其路径。这样 Windows 就会记住在哪里找到相应的 .exe 文件,而不会使PATH环境变量膨胀。

应用程序注册

针对每个用户安装的应用程序可以注册在 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths 下。针对计算机的所有用户安装的应用程序可以注册在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths 下。

应用程序路径下的条目主要用于以下目的:

  • 将应用程序的可执行文件名映射到该文件的完整限定路径。
  • 根据每个应用程序、每个进程将信息添加到 PATH 环境变量的前面。

例如,默认的 Windows 安装具有以下注册表项:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WORDPAD.EXE
(Default)="%ProgramFiles%\Windows NT\Accessories\WORDPAD.EXE"

这样,即使不在 PATH 中,也可以通过输入wordpad(或在 cmd 提示符下)从“开始/运行”启动写字板。start wordpad%ProgramFiles%\Windows NT\Accessories

相关内容