Perché sono in grado di eseguire un programma che non si trova nella mia variabile d'ambiente PATH?


9

Mi chiedevo perché il comando java -versionè accessibile a livello globale ?

Potrei eseguirlo da qualsiasi directory e il suo funzionamento:

inserisci qui la descrizione dell'immagine

Come funziona?

Ecco PATHcome appare la mia variabile di sistema :

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

Per quanto mi riguarda, java.exesi trova a%programfiles%\java\jre7\bin


2
Vedi qui .
Daniel Beck

Al momento non ho i dettagli a portata di mano, motivo per cui questo è un commento e non una risposta, ma se java.exe(o java.com, ecc.) Non è nella tua, PATHc'è un'altra voce di registro che può specificare percorsi eseguibili.
Mark Hurd,

1
@MarkHurd cmd (e CreateProcess) non esamina la voce del Registro di sistema Percorsi app, ma solo ShellExecute [e quindi la finestra di dialogo Esegui].
Casuale 832

@MarkHurd, come ti aspettavi, non è nel mio percorso variabile ..
Pacerier

1
@Pacerier L'eseguibile java si trova in% SystemRoot% \ System32 \
Dwayne Hinterlang

Risposte:


13

In genere, esiste un gruppo di directory in cui i file eseguibili che vengono ripetutamente utilizzati devono essere trovati da Windows, ma in pratica non esiste un motivo specifico per utilizzare un comando come globale o no. Gli sviluppatori lo includevano come "globale" dove vogliono, sono liberi di farlo. Se si desidera utilizzare qualsiasi comando come "globale", è necessario aggiungere il comando come "variabile di ambiente Windows" . Per fare ciò, puoi usare i seguenti metodi :

  1. Aggiunta manuale con "Proprietà di sistema di Windows": inserisci qui la descrizione dell'immagine

  2. Utilizzando lo strumento aggiuntivo Setx.exe:

Non fa parte dell'installazione standard di Windows XP ma uno strumento da riga di comando chiamato setx.exe è incluso negli strumenti di supporto di Windows XP Service Pack 2. Questo strumento estende il comando set in modo da poter apportare modifiche permanenti alle variabili di ambiente. Ad esempio, per aggiungere una cartella C: \ Nuova cartella al percorso, il comando sarebbe

setx path "%PATH%;C:\New Folder" 
  1. Script per elencare le variabili d'ambiente:

Il comando "Imposta" può essere utilizzato in un prompt dei comandi insieme a un reindirizzamento a un file di testo per creare un elenco delle variabili di ambiente correnti. Il comando potrebbe essere

set > C:\env_list.txt 

Il nome del file "C: \ env_list.txt" può essere sostituito da qualsiasi scelta.

Microsoft ha anche un VBScript che elenca le variabili di ambiente in questa pagina .

  1. Chiavi di registro per variabili d'ambiente:

Per coloro che hanno esperienza con la modifica del Registro di sistema, esiste un altro modo per apportare modifiche alle variabili di ambiente. Le variabili di ambiente dell'utente sono memorizzate nel registro nella chiave:

HKEY_CURRENT_USER\Environment

Le variabili di sistema si trovano nella chiave:

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

Si noti che qualsiasi variabile d'ambiente nella forma che deve essere espansa (ad esempio,% PATH%) deve essere memorizzata nel registro come valore di registro REG_EXPAND_SZ. La modifica del Registro di sistema è principalmente per gli script utilizzati dagli amministratori di sistema e non è consigliata per l'utente medio del PC.

Puoi trovare maggiori informazioni al riguardo qui.


1
Tuttavia, java.exe si trova in %programfiles%\java\jre7\bin. Questa cartella non appare nella variabile Path del mio sistema ..
Pacerier

7
Java.exe si trova anche in% SystemRoot% \ System32 \ che appare nella variabile PATH
Dwayne Hinterlang

5

I "comandi globali" sono determinati dalle variabili di ambiente.

A seconda del sistema operativo in uso, accedervi per impostarlo è piuttosto diverso.

Il modo più generico è di

Fare clic con il tasto destro del mouse su "Risorse del computer" Selezionare "Proprietà"

In Windows 7 dovrai selezionare "Impostazioni di sistema avanzate" nel riquadro a sinistra.

Dopo aver aperto la finestra di dialogo Proprietà del sistema, selezionare la scheda "Avanzate".

In fondo, c'è un pulsante "Variabili d'ambiente"

Nella finestra di dialogo Variabili d'ambiente, sarai in grado di configurare le variabili ambientali per utente o per l'intero sistema.

Ad esempio, la variabile di sistema "Percorso" semplificata sarebbe simile a questa ...

C: \ Programmi \ Java \ jre6 \ bin ; C: \ Ruby19 \ bin;

Gli eseguibili in questi percorsi possono essere chiamati direttamente dalla riga di comando.

Il motivo per cui è possibile chiamare calc, mspaint, cmd tutto dalla finestra di dialogo Esegui è perché C: \ windows \ system32 si trova nella variabile di ambiente Path.

È possibile aggiungere percorsi personalizzati nelle variabili ambientali, facendo attenzione a non sostituire quello esistente e a separare i percorsi utilizzando un punto e virgola. ";"

È quindi possibile eseguire un eseguibile da quel percorso direttamente nella riga di comando senza digitare l'intero percorso, come il comando java -version.

Per ulteriori informazioni, consultare i seguenti collegamenti ...

variabili ambientali

Comprendere e configurare le variabili di ambiente

Ricerca Java.exe su una nuova installazione


3

Ecco un semplice whichche mostra tutti gli hit di comando in PATH per le estensioni PATHEXT correnti:

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

Inseriscilo where.cmd(permettendo whichdi venire da qualche altra parte se lo capisci!) E chiamalo con where java.

Ora, nel mio commento di cui sopra, ho suggerito che, se javanon non appare nel vostro PATH, è possibile controllare in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths [ref] , ma dopo aver in realtà cercando questo, non funziona con la riga di comando, solo con le cose che l'uso ShellExecuteEx, come ad esempio Start Run e il startcomando CLI.


2

Quando si immette un comando, la shell esamina una variabile di ambiente denominata PATH (% PATH%, $ PATH a seconda del sistema operativo). Interroga ogni directory sul PERCORSO per vedere se incontra un eseguibile che corrisponde al comando che hai inserito. Il primo che trova verrà eseguito.

Vedi altre risposte per alcuni dei vari modi per impostare la variabile PATH.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.