Come fa la finestra di dialogo Esegui a sapere dove si trovano le applicazioni?


72

Come utente esperto, utilizzo spesso la finestra di dialogo Esegui.

Posso capire perché i seguenti comandi funzionano, come lo sono nella PATHvariabile d'ambiente.

mspaint
diskmgmt.msc
explorer

Questi comandi funzionano anche in CMD.

I comandi seguenti funzionano in esecuzione, ma non sono presenti PATHe non funzionano in CMD.

firefox
winword
iexplore

Come fa Run a sapere dove si trovano questi file?

Risposte:


90

Quando si esegue un comando dalla finestra di dialogo Esegui, il sistema esamina la App Pathschiave di registro qui:

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

e

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

ESEMPIO

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\filezilla.exe

(default) i dati di valore hanno il percorso completo dell'eseguibile.

Se non viene trovato, esamina ogni cartella inclusa nel PERCORSO.

Considerando che il prompt dei comandi non fa riferimento a queste chiavi di registro. Cerca solo nel PERCORSO.


5
Ah, questo probabilmente spiega perché non puoi avere più programmi con lo stesso nome che funzionano con le opzioni. Design scadente.
curiousdannii,

2
Sì quasi. Ma Open with dialog legge da HKCR\ApplicationseRegisteredApplications
w32sh il


6
Ovviamente puoi usare il startbuilt-in che cerca i percorsi delle app.
Neil,

1
Questo è abbastanza ben documentato qui . Ho anche spiegato come cmd fa la sua ricerca qui - è un po 'un caso speciale distinto dalle API Win32.
Bob

4

La risposta di w32sh sottolinea correttamente che i tasti extra cercati dalla finestra di dialogo Esegui sono qui:

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

Esiste una documentazione ufficiale per questi percorsi .

Un fatto importante di queste chiavi è che il nome della chiave (ad esempio "filezilla.exe") non deve corrispondere in alcun modo al percorso completo. In Windows 7, il valore può anche essere una semplice riga di comando, simile a quella che può essere utilizzata come "destinazione" di un collegamento.

Ad esempio, avevo questo nel mio registro:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\jedit.exe]
@="\"C:\\WINDOWS\\system32\\javaw.exe\" -Xms24M -Xmx512M -jar \"C:\\Program Files\\jEdit\\jedit.jar\" -reuseview"

Non riesco a farlo funzionare in Windows 10, ma puoi comunque puntare su qualsiasi file, incluso un file batch, ad es

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\jedit.exe]
@="C:\\Program Files\\jEdit\\run-jedit.bat"

Ciò consente di digitare "jedit" o "jedit C: \ foo \ bar \ something.txt" per eseguire la JVM con le opzioni appropriate e avviare / riutilizzare jEdit .

Per quanto posso vedere, il nome della chiave deve terminare con ".exe", quindi per creare un alias di "abc", devi creare una chiave "abc.exe", anche se non punta a un file ".exe" .


Non funziona qui se utilizzo switch aggiuntivi dopo il nome del file eseguibile.
w32sh

@ w32sh Hm, penso che sia cambiato in Win 10 :(
IMSoP

-1

C'è una variabile d'ambiente chiamata PATH, o% PATH% nella riga di comando. Contiene una serie di posizioni da cercare.

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.