Pada Windows 10, saya memiliki file yang dipanggil truffle.js
di folder saya saat ini. Saya menulis truffle
di jendela cmd, berharap untuk menjalankan truffle
program yang berada di tempat lain di jalan saya.
Sebaliknya, truffle.js
dibuka di IDE favorit saya ( .js
file terkait dengan IDE itu). Saya pikir perilaku ini hanya seperti ini untuk file yang dapat dieksekusi .bat
,, .com
dan .exe
. Mengapa itu terjadi pada .js
file?
Catatan: Saya kemudian menemukan bahwa saya truffle
sama sekali tidak menginstal di jalur saya, tetapi pertanyaan saya tetap: mengapa Windows menyelesaikan ekstensi yang saya tidak tentukan pada file yang tidak dapat dieksekusi?
Bahkan setelah menginstal truffle dan memulai ulang cmd, saya tidak bisa menjalankan truffle yang sebenarnya dalam folder yang berisi file truffle.js
.
c:\path\application.exe c:\path\filename.ext
bukan hanyafilename
.Jawaban:
Karena
%PATHEXT%
diatur.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
secara default. Perhatikan bagaimana isinya.js
.Itu berarti jika Anda mengetik nama, CMD akan mencari file dengan ekstensi ini ditambahkan, dalam urutan itu, di folder saat ini. Hanya setelah itu ia akan mempertimbangkan apa yang ada di dalamnya
%PATH%
. Perilaku ini tidak dapat diubah. Anda dapat memodifikasi%PATHEXT%
, seperti variabel lingkungan lainnya.Anda dapat menggunakan
WHERE
perintah untuk memeriksa jalur mana yang akan dibuka (mis.where truffle
), Yang secara otomatis akan mencari% PATH% dan% PATHEXT% seperti CMD.sumber
CreateProcess
dan saya pikir jugaShellExecute(Ex)
API, tidak melihat PATHEXT. Pencarian ekstensi hanya diimplementasikan dalam shell default (cmd.exe dan powershell.exe). Yang mengatakan,CreateProcess
danShellExecute(Ex)
akan ditambahkan.exe
secara khusus.%PATHEXT%
variabel lingkungan.