Mengapa perubahan pada PATH saya tidak dikenali?

36

Ketika saya memperbarui PATH saya menggunakan dialog Lingkungan Variabel bawaan, atau sesuatu seperti Path Editor , dan kemudian membuka prompt perintah, perubahan pada PATH saya tidak akan mendaftar dengan konsol, tergantung di mana prompt perintah itu dimulai dari.

Sebagai contoh, jika saya mengedit PATH saya dan kemudian mulai cmd.exe dari Start Menu atau jalan pintas di Desktop, maka PATH saya terlihat baik-baik saja: itu telah berhasil diperbarui; Namun, jika saya mulai cmd.exe dari shortcut di mana saja lain daripada Start Menu atau Desktop, PATH baru tidak bisa membaca dan saya mendapatkan jalan lama gantinya. Itu sangat aneh.

Saya sudah mencoba menjalankan command prompt dari pintasan di desktop dan berfungsi dengan baik; Saya kemudian menyalin pintasan yang sama persis ke sub-folder di desktop, dan saya mendapatkan masalah PATH yang tidak diperbarui.

Saya menyadari ini cukup sulit untuk dijelaskan, jadi saya membuat screencast untuk menunjukkan masalah ini dalam tindakan .

Berikut screenshot dari pintasan Prompt Perintah seperti yang terlihat di screencast itu:

Command prompt pengaturan pintasan

Ini ada di Windows Vista Home Premium SP2.

Charles Roper
sumber

Jawaban:

30

Saat Anda memulai proses baru (seperti baris perintah baru), itu akan mengambil variabel lingkungan dari proses yang memulainya. Ketika jalur diperbarui, hanya proses yang melakukan pembaruan yang dapat mengetahuinya telah berubah, dan pengaturan tersebut tidak menyebar hingga Anda masuk kembali (untuk pengaturan per pengguna) atau reboot (untuk pengaturan sistem)

Rowland Shaw
sumber
2
Namun, explorerproses utama akan mendeteksi perubahan lingkungan di Registry (kotak dialog milik rundll32) dan memperbarui lingkungannya sendiri secara otomatis. (Setidaknya di XP melakukannya.) Inilah mengapa perubahan terlihat ketika mulai cmddari jalan pintas.
grawity
Rowland, ini memberi saya informasi yang cukup untuk memecahkan secara persis mengapa ini terjadi, meskipun itu tidak menjawab pertanyaan saya sepenuhnya. Lihat jawaban saya sendiri untuk detailnya. Terima kasih!
Charles Roper
Terima kasih atas jawaban ini! Yang harus saya lakukan adalah menutup command prompt saya dan membukanya lagi.
user1477388
Ini solusi untuk saya! Saya menggunakan Git Bash untuk Windows dalam bungkus multitab (ConEmu) dan bertanya-tanya mengapa echo $PATHtidak bekerja. Saya berasumsi itu akan segar tetapi tidak keluar sampai saya menutup semua tab Git Bash dan ConEmu.
Oliv Utilo
27

Seperti yang disarankan Rowland, ketika memulai proses baru, ia akan membaca variabel lingkungan dari proses yang memulainya. Oleh karena itu, ketika memulai command-prompt dari Start Menu atau Desktop , ia membaca variabel lingkungan dari explorer.exemana, seperti yang disarankan grawity, mendeteksi perubahan pengaturan lingkungan di registri dan dengan demikian saya melihat PATH baru saya di command-prompt mulai dari Desktop atau Start Menu.

Alasan saya tidak melihat pembaruan untuk PATH saya di screencast yang saya posting adalah karena saya awalnya meluncurkan jendela explorer menggunakan FARR membuat FindAndRunRobot.exeproses induk. FARR tidak secara otomatis mendeteksi perubahan lingkungan dan, proses anak yang dihasilkan darinya tidak mengambil PATH baru. Saya juga memiliki opsi ' Buka folder windows dalam proses terpisah ' yang diatur dalam Explorer yang berarti bahwa semua windows explorer.exe saya buka setelah yang pertama dibuka oleh FARR di mana juga anak-anak FARR .

Dengan mematikan opsi ' Buka folder windows dalam proses terpisah ', explorer.exeproses baru tidak dibuat di bawah FARR, yang menyelesaikan masalah saya. Namun, saya juga meluncurkan jendela konsol dan hal-hal lain langsung dari FARR; ini juga mendapatkan pengaturan lingkungan lama. Jika saya me-restart FARR, maka pengaturan lingkungan baru disebarkan.

Berikut adalah screenshot dari Process Explorer yang menunjukkan proses yang muncul dari FARR. Tak satu pun dari proses ini menerima pengaturan lingkungan baru dari tingkat atas explorer.exekecuali jika saya memulai ulang FARR:

proses penjelajah

Charles Roper
sumber
3
Mengapa jawaban saya ditolak? Jika ada cacat di dalamnya, beri tahu saya dan saya akan mencoba memperbaikinya.
Charles Roper
sangat masuk akal.
lwpro2