Чому я можу виконати програму, яка не знаходиться в моїй змінній середовища PATH?


9

Мені було цікаво, чому команда java -versionдоступна в усьому світі ?

Я можу запустити його з будь-якого каталогу та його робочого:

введіть тут опис зображення

Як це працює?

Ось так виглядає моя системна PATHзмінна:

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

Як на мене, java.exeзнаходиться в с%programfiles%\java\jre7\bin


2
Дивіться тут .
Даніель Бек

На даний момент у мене немає деталей, тому це коментар, а не відповідь, але якщо java.exe(або java.comтощо) немає у вашому PATHреєстрі, є інший запис у реєстрі, який може вказати виконавчі шляхи.
Марк Херд

1
@MarkHurd cmd (і CreateProcess) не вивчає запис у реєстрі додатків Paths, лише ShellExecute [і, отже, діалогове вікно Run].
Випадково832

@MarkHurd, як ви й очікували, це не в моїй змінній дорозі ..
Pacerier

1
@Pacerier Виконаний файл Java знаходиться у% SystemRoot% \ System32 \
Dwayne Hinterlang

Відповіді:


13

Як правило, існує група каталогів, де виконувані файли, які неодноразово використовуються, повинні знаходитись у вашій Windows, але в практиці немає конкретної причини використовувати команду як глобальну чи ні. Розробники звикли її включати як "глобальну", де вони хочуть, вони можуть це робити. Якщо ви хочете використовувати будь-яку команду як "глобальну", вам потрібно буде додати свою команду як "змінна середовище Windows" . Для цього можна скористатися наступними методами :

  1. Додавання вручну за допомогою "Властивості системи Windows": введіть тут опис зображення

  2. Використання додаткового інструменту Setx.exe:

Вона не є частиною стандартної установки Windows XP, але інструмент командного рядка під назвою setx.exe включений до Інструментів підтримки Windows XP Service Pack 2. Цей інструмент розширює встановлену команду, щоб постійно можна було змінити змінні середовища. Наприклад, щоб додати папку C: \ New Folder до шляху, команда була б

setx path "%PATH%;C:\New Folder" 
  1. Сценарії для лістингу змінних довкілля:

Команда "Встановити" може використовуватися в командному рядку разом з перенаправленням до текстового файлу для складання списку змінних поточного середовища. Команда може бути

set > C:\env_list.txt 

Ім'я файлу "C: \ env_list.txt" можна замінити будь-яким на ваш вибір.

Microsoft також має VBScript, який перераховує змінні середовища на цій сторінці .

  1. Ключі реєстру для змінних довкілля:

Для тих, хто має досвід редагування Реєстру, є ще один спосіб внести зміни в змінні середовища. Змінні середовища користувача зберігаються в Реєстрі в ключі:

HKEY_CURRENT_USER\Environment

Системні змінні знаходяться в ключі:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Зауважте, що будь-яка змінна середовище у формі, яку потрібно розширити (наприклад,% PATH%), повинна зберігатися в реєстрі як значення реєстру REG_EXPAND_SZ. Редагування Реєстру в основному стосується скриптів, які використовуються системними адміністраторами, і не рекомендується середньому користувачеві ПК.

Ви можете знайти більше інформації про це тут.


1
Однак java.exe знаходиться в %programfiles%\java\jre7\bin. Ця папка не відображається в змінній Шлях моєї системи ..
Pacerier

7
Java.exe також знайдений у% SystemRoot% \ System32 \, який відображається у вашій змінній PATH
Dwayne Hinterlang

5

"Глобальні команди" визначаються вашими змінними середовища.

Залежно від того, яку ОС ви використовуєте, щоб дістатись до нього для налаштування, вона досить різна.

Найбільш загальний спосіб - мимо

Клацніть правою кнопкою миші "Мій комп'ютер" Виберіть "Властивості"

У Windows7 вам доведеться вибрати "Розширені налаштування системи" на панелі зліва.

Після відкриття діалогового вікна "Властивості системи" виберіть вкладку "Додатково".

Внизу є кнопка "Змінні середовища"

У діалоговому вікні змінних середовищ ви зможете налаштувати змінні середовища на користувача або для всієї системи.

Наприклад, спрощена системна зміна "Шлях" виглядатиме приблизно так ...

C: \ програмні файли \ Java \ jre6 \ bin ; C: \ Ruby19 \ bin;

Виконані файли в цих контурах можна викликати безпосередньо з командного рядка.

Причина, за якою можна викликати calc, mspaint, cmd все з діалогового вікна Run, полягає в тому, що C: \ windows \ system32 знаходиться в змінній середовища Path.

Ви можете додати спеціальні шляхи до змінних довкілля, обережно, щоб не переосмислити існуючі та розділити шляхи за допомогою напівколонки. ";"

Потім можна запустити виконуваний файл із цього контуру безпосередньо в командному рядку, не вводячи весь шлях, як команда java -version.

Для більш детального ознайомлення перегляньте наступні посилання ...

Змінні середовища

Розуміння та налаштування змінних середовища

Пошук Java.exe при новій установці


3

Ось простий, whichякий відображає всі звернення команди в PATH для поточних розширень PATHEXT:

@for %%I in ("%path:;=\" "%") do @for %%E in (%pathext:;= %) do @if exist "%%~dpI%1%%E" @echo %%~dpI%1%%E

Помістіть це where.cmd(дозволяючи whichприїхати звідки-небудь ще, якщо отримаєте!) Та подзвоніть йому where java.

Тепер у своєму коментарі вище я запропонував, що якщо javaвін не відображається у вашому PATH, ви можете зареєструватись HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths [ref] , але після того, як насправді спробуєте це, він не працює з командним рядком, лише з речами, які використовуються ShellExecuteEx, наприклад, Start Run і команда startCLI.


2

Коли ви вводите команду, оболонка розглядає змінну середовища з назвою PATH (% PATH%, $ PATH залежно від ОС). Він запитує кожен каталог на PATH, щоб побачити, чи не зустрічається він з виконуваним файлом, який відповідає команді, яку ви ввели. Перший, який він знайде, буде виконаний.

Див. Інші відповіді на деякі з різних способів встановлення змінної PATH.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.