Bagaimana dialog Run tahu di mana aplikasi berada?

72

Sebagai pengguna yang kuat, saya sering menggunakan dialog Run.

Saya bisa mengerti mengapa perintah berikut ini bekerja, karena mereka berada dalam PATHvariabel lingkungan.

mspaint
diskmgmt.msc
explorer

Perintah-perintah ini juga berfungsi di CMD.

Perintah-perintah di bawah ini bekerja dalam menjalankan, tetapi mereka tidak dalam PATH, dan mereka tidak bekerja di CMD.

firefox
winword
iexplore

Bagaimana Run tahu di mana file-file ini?

mt025
sumber

Jawaban:

90

Ketika Anda menjalankan perintah dari dialog Run, sistem melihat App Pathskunci registri di sini:

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

dan

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

CONTOH

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

(default) nilai data memiliki jalur lengkap ke yang dapat dieksekusi.

Jika tidak ditemukan, terlihat di setiap folder yang termasuk dalam PATH.

Sedangkan Command Prompt tidak merujuk kunci registri ini. Ini hanya mencari PATH.

w32sh
sumber
5
Ah, ini mungkin menjelaskan mengapa Anda tidak dapat memiliki banyak program dengan nama yang sama berfungsi dengan terbuka dengan opsi. Desain yang buruk.
curiousdannii
2
Ya hampir. Tapi Buka dengan dialog berbunyi dari HKCR\ApplicationsdanRegisteredApplications
w32sh
4
Microsoft memberikan video tentang ini: channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-133-App-Paths
magicandre1981
6
Anda tentu saja dapat menggunakan startbuiltin yang tidak mencari jalur aplikasi.
Neil
1
Ini didokumentasikan dengan cukup baik di sini . Saya juga menjelaskan bagaimana cmd melakukan pencariannya di sini - ini adalah kasus khusus yang berbeda dari Win32 API.
Bob
4

Jawaban w32sh dengan benar menunjukkan bahwa kunci tambahan yang dicari oleh dialog Run ada di sini:

  • HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Path Aplikasi \
  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Path Aplikasi \

Ada dokumentasi resmi untuk jalur ini .

Fakta penting tentang kunci-kunci ini adalah bahwa nama kunci (misalnya "filezilla.exe") tidak harus cocok dengan path lengkap dengan cara apa pun. Di bawah Windows 7, nilainya bahkan bisa berupa baris perintah sederhana, mirip dengan apa yang dapat digunakan sebagai "target" dari jalan pintas.

Sebagai contoh, saya menggunakan ini di registri saya:

[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"

Sepertinya saya tidak bisa melakukan ini di Windows 10, tetapi Anda masih bisa menunjuk file apa pun, termasuk file batch, misalnya

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

Itu memungkinkan Anda mengetik "jedit" atau "jedit C: \ foo \ bar \ something.txt" untuk menjalankan JVM dengan opsi yang sesuai dan meluncurkan / menggunakan kembali jEdit .

Sejauh yang saya lihat, nama kunci harus diakhiri dengan ".exe", jadi untuk membuat alias "abc", Anda membuat kunci "abc.exe", bahkan jika itu tidak menunjuk ke file ".exe" .

IMSoP
sumber
Tidak berfungsi di sini jika saya menggunakan sakelar tambahan setelah nama file yang dapat dieksekusi.
w32sh
@ w32sh Hm, saya pikir itu berubah di Win 10 :(
IMSoP
-1

Ada variabel lingkungan yang disebut PATH, atau% PATH% di baris perintah. Ini berisi serangkaian lokasi untuk dicari.

Garhoogin
sumber