Saya mencoba percobaan berikut.
Sebelum saya mulai, saya memeriksa variabel PATH dari cmd, yang memiliki nilai berikut:
Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramData\Lenovo\ReadyApps;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Calibre2\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;
Pada awalnya, saya berpikir bahwa cmd hanya mencari executable di direktori yang terdapat dalam variabel PATH, jadi saya secara acak memilih aplikasi - winword.exe (Microsoft Word), dan mencoba meluncurkannya dari baris perintah:
start winword
Tapi yang mengejutkan saya, program ini diluncurkan! Alasan saya terkejut adalah karena saya telah mencari di seluruh direktori dalam variabel PATH untuk file exe yang disebut 'winword' tetapi semua pencarian saya kosong!
Karena itu saya telah menyimpulkan bahwa command prompt pasti tahu untuk mencari di tempat selain yang ditentukan dalam variabel PATH untuk mencari executable.
Jadi jelas, hal berikutnya yang saya lakukan adalah mencari lokasi yang tepat di mana file executable 'winword' berada. Ternyata winword.exe terletak di sini:
C:\Program Files\Microsoft Office 15\root\office15
Maka memberi saya ide bahwa mungkin CMD secara otomatis melihat melalui ProgramFiles dan ProgramFiles (x86) (dan semua subdirektori mereka) ketika menjalankan perintah 'mulai'? Yang membuat saya mencoba meluncurkan aplikasi lain yang terinstal di komputer saya, Audacity, dengan file exe yang terletak di:
C:\Program Files (x86)\Audacity
Sekali lagi, yang mengejutkan saya, Audacity gagal diluncurkan ketika saya mengetik:
start audacity
di baris perintah.
Saya kemudian menambahkan direktori yang berisi audacity.exe ke PATH:
set path=%path%;C:\Program Files (x86)\Audacity
setelah itu saya mencoba meluncurkan lagi keberanian:
start audacity
Yah, tidak mengherankan, Audacity diluncurkan.
Yang ingin saya ketahui adalah di mana tepatnya command prompt mencari executable? Mengapa winword.exe diluncurkan bahkan ketika direktori yang berisi itu bukan bagian dari PATH, tetapi hal yang sama tidak berlaku untuk audacity.exe?
Saya mencoba aplikasi lain juga. Chrome dan Firefox berfungsi saat saya menggunakan perintah mulai.
UPDATE: Saya menjalankan Windows versi 6.3.9600 (Windows 8.1)
Jawaban:
Alasannya
winword.exe
adalah karena ada kunci registri yang menentukan jalur ke Microsoft Word (Winword.exe). Kunci serupa ada untuk Firefox.exe dan Chrome.exe jika aplikasi tersebut diinstal.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
Variabel PATH Sistem, Variabel PATH Pengguna, dan berbagai tombol di dalamnya
..\App Paths
. Saya dapat mengonfirmasi bahwa Audacity tidak membuat kunci untuk dirinya sendiri ketika diinstal.Sumber: Pendaftaran Aplikasi
sumber
Dari command prompt, jika Anda memasukkannya
WinWord
gagal dijalankan.Jika Anda memasukkannya
START WinWord
berjalan.The
Start
perintah adalah kunci di sini.Saat Anda mencoba menjalankan file melalui perintah mulai, Prompt Perintah tidak melakukan pencarian apa pun. Sebagai gantinya, ia meneruskan nama file (dan argumen) ke Windows sendiri (melalui panggilan API ShellExecuteEx), yang kemudian harus mencari lokasi file. Ada beberapa tempat yang dicari dalam urutan berikut:
Direktori kerja saat ini.
Hanya
Windows
direktori (tidak ada subdirektori yang dicari).The
Windows\System32
direktori.Direktori yang tercantum dalam
PATH
variabel lingkungan.Direkomendasikan:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
WinWord
ada di kunci registri itu. Kuncinya ada di sana agarPATH
tidak terlalu lama.sumber
Program (ketika Anda menentukan nama modulnya tanpa drive / path di command prompt) di prosesor perintah Windows (CMD.EXE) dapat dimulai ketika ditemukan:
oleh variabel lingkungan PATH (keduanya dapat dieksekusi dan hardlink / softlink / pintasnya dengan nama yang sama)
oleh DOSKEY alias
menurut jalur aplikasi dari
HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths
atauHKCU\Software\Microsoft\Windows\CurrentVersion\App Paths
(saat menggunakanstart
perintah)Menggunakan pengetahuan ini (terutama yang terakhir), Anda dapat membuat alias sendiri yang nyaman bagi Anda. Misalnya Anda dapat membuat
HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exe
dengan nilai defaultC:\Program Files (x86)\Audacity\Audacity.exe
dan memulai aplikasi ini hanya dengan mengetikkanstart au
command prompt.sumber
Sementara jawaban lain kemungkinan menjadi alasan spesifik dalam kasus Anda, ada juga jawaban lain untuk pertanyaan Anda yang mungkin menjadi kasus untuk beberapa aplikasi lain: di tempat yang sama dengan yang Anda cari, tetapi dengan ekstensi file yang berbeda.
Anda secara khusus mengatakan bahwa Anda sedang mencari file dengan ekstensi
exe
. Windows juga akan berusaha untuk mengeksekusi file dari ekstensi lain.Variabel lingkungan lain yang ikut bermain saat mengeksekusi perintah adalah variabel
PATHEXT
. Ini adalah;
daftar ekstensi file yang akan dieksekusi untuk mencoba dieksekusi. Jika Anda menggema,PATHEXT
Anda mungkin melihat sesuatu seperti.COM;.EXE;.BAT;.CMD;.VBS;
... (dll.). Beberapa aplikasi menggunakan tipe file lain ini sebagai titik masuk pengguna akhir. Ini jauh lebih jarang, tetapi itu terjadi. Saya telah menggunakan beberapa produk komersial utama yang dimulai dari.BAT
skrip. Untuk menggunakan salah satu dari mereka sebagai contoh, saya dapat memulainya dengan perintahstandalone
meskipun tidak adastandalone.exe
... sebagai gantinya, ia memiliki astandalone.bat
.Beberapa ekstensi yang saya miliki di
PATHEXT
Saya sedang melihat saat ini saya belum pernah menggunakan aplikasi. Orang yang saya telah mengalami jauh lebih umum (tapi jelas tidak sebanyakexe
) adalah:.com
,.bat
,.vbs
,.js
,.jar
. Dua yang pertama adalah file skrip batch windows, dan tiga lainnya adalah tipe file untuk bahasa pemrograman tertentu yang dijalankan dari skrip atau mesin virtual, bukan dariexe
s (masing-masing: visual basic, javascript, dan java).sumber
PATHEXT
danPATH
, keduanya terkait untuk menjalankan sesuatu, mereka agak ortogonal dalam tugas masing-masing.PATH
menentukan tempat untuk mencari hal-hal untuk dijalankan, dan apa yang diminta OP, sementaraPATHEXT
menentukan apa yang bisa dijalankan.start winword
tidak memberi tahu command prompt untuk memulaiwinword
. Ini memberitahu command prompt untuk memulaistart
dengan argumenwinword
.Start
menggunakan metode sendiri untuk menemukanwinword
.Hanya
winword
memberi tahu command prompt untuk memulaiwinword
. Dan jika Anda mencobanya, karenawinword
tidak aktifPATH
, itu tidak diluncurkan.sumber