Почему некоторые программы нуждаются в значении Path, а другие - в Windows?

418
JohnDoea

Почему, когда я устанавливаю Composer в Windows 7/8/10 или в некоторых программах под UNIX, таких как GNU Tar, мне нужно установить их значение Path, а если нет, они не будут использоваться другими программами?

6
Вещи командной строки работают лучше, если они есть в вашем «% PATH%», вы можете просто ввести новую команду в «оболочке». cylgalad 8 лет назад 1
ну, это значит, что другим программам не нужно угадывать, в каком каталоге находится программа, они могут знать имя исполняемого файла и позволить cmd сканировать путь. barlop 8 лет назад 0

3 ответа на вопрос

3
TOOGAM

Я ответил на это для 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 $" вместо " echo %PATH%", использовали прямые косые черты вместо обратных, а 7zaдля 7-Zip вместо 7z.exe. Если вы хотите изменить путь, вы можете использовать другую команду, например export, но на самом деле в зависимости от того, какую оболочку вы используете.)

Для получения дополнительной информации о Linux, см. Последующий вопрос спрашивающего на AskUbuntu: http://askubuntu.com/questions/715208/ JdeBP 8 лет назад 0
2
Pimp Juice IT

Почему некоторые программы нуждаются в значении Path, а другие - в Windows?

Почему, когда я устанавливаю Composer в Windows 7/8/10 или в некоторых программах под UNIX, таких как GNU Tar, мне нужно установить их значение Path, а если нет, его не смогут использовать другие программы?

PATH - это переменная среды в Unix-подобных операционных системах, DOS, OS / 2 и Microsoft Windows, указывающая набор каталогов, в которых находятся исполняемые программы. В общем, каждый выполняющийся процесс или пользовательский сеанс имеет свою собственную настройку PATH.

DOS, OS / 2 и Windows

Некоторые программы могут добавлять свой каталог в начало содержимого переменной PATH во время установки, чтобы ускорить процесс поиска и / или переопределить команды ОС. В эпоху DOS обычно добавляли строку PATH ;%PATH%или .SET PATH=;%PATH%AUTOEXEC.BAT

Когда команда вводится в командной оболочке или системный вызов выполняется программой для выполнения программы, система сначала ищет текущий рабочий каталог, а затем ищет путь, просматривая каждый каталог слева направо, ища исполняемое имя файла соответствует имени команды Исполняемые программы имеют расширения имени файла EXEили COM, а пакетные сценарии имеют расширения BATили CMD. Другие исполняемые расширения файлов также могут быть зарегистрированы в системе.

Unix и Unix-подобные

Когда имя команды задается пользователем или из программы выполняется вызов exec, система просматривает $PATH, просматривая каждый каталог слева направо в списке, ищет имя файла, которое соответствует имени команды. После обнаружения программа выполняется как дочерний процесс командной оболочки или программы, которая выдала команду.

Источник: PATH_ (переменная)

1
dxiv

В Windows приложение может зарегистрировать свой путь \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" 

Это позволяет запускать WordPad из меню «Пуск / Выполнение», просто набирая wordpad(или start wordpadпо приглашению cmd), даже если %ProgramFiles%\Windows NT\Accessoriesего нет в переменной PATH.

Работает с Run в меню Пуск. Однако этот подход не работает с командной строкой: у вас должен быть исполняемый файл в PATH. Alexey Ivanov 8 лет назад 0
@ AlexeyIvanov Он работает в командной строке, как написано. Обратите внимание, что вы должны использовать `start` -` start wordpad` будет работать, но просто `wordpad` не будет. (На уровне API разница в том, что `start` вызывает ShellExecEx, который распознает и использует` пути к приложениям ', в то время как при запуске напрямую вызывается CreateProcess, который этого не делает.) dxiv 8 лет назад 0
Если вам нужно использовать другую команду, в данном случае `start`, а не имя программы, которую вы хотите запустить, то она * не * работает. И эта маленькая деталь имеет большое значение. (Я знаю о разнице, спасибо.) Alexey Ivanov 8 лет назад 0