Di mana variabel lingkungan untuk proses cmd.exe tinggi berasal?
Seperti semua proses, ia mendapatkan lingkungannya dari proses yang menelurkan instance command-prompt.
Ketika suatu proses memunculkan proses lain, proses anak mewarisi lingkungan orangtua. Jika orang tua diistimewakan, maka mungkin memiliki variabel lebih / berbeda daripada jika tidak. Ketika memunculkan proses anak, anak mendapatkan set yang sama untuk memulai.
Variabel lingkungan yang ditunjukkan oleh perintah SET bisa sangat berbeda tergantung pada tingkat hak istimewa dari sesi prompt perintah.
Karena ketika Explorer tidak benar-benar menelurkan proses istimewa, CSRSS melakukannya. Ketika Anda menjalankan program "sebagai admin", Anda mendapatkan prompt UAC yang meredupkan layar. Ini karena CSRSS adalah proses sistem yang menangani permintaan dan peningkatan proses UAC. Jadi sementara Explorer dan proses anaknya memiliki satu lingkungan, command-prompt yang ditinggikan (yang dihasilkan oleh proses sistem privilege tinggi atas perintah Explorer) mendapatkan set yang sedikit berbeda dengan beberapa variabel ekstra / berbeda.
Selain itu, tampaknya setiap program yang dijalankan dengan kredensial administratif oleh pengguna yang sama dapat membuat variabel lingkungan yang akan bertahan lama setelah proses itu berakhir dan akan ditetapkan dalam setiap proses lanjutan berikutnya yang diluncurkan oleh pengguna tersebut (dan HANYA dalam proses yang ditinggikan).
Nggak. The set
perintah sesi-satunya. Setelah Anda menutup command-prompt itu, segala perubahan yang Anda lakukan menjadi sia-sia. Untuk membuat perubahan terus-menerus, Anda harus menggunakan alat eksternal seperti utilitas pihak ketiga atau program alat Microsoft setx
. Ini berlaku bahkan untuk perintah-perintah yang ditinggikan; yang set
perintah hanya tidak memiliki fungsi untuk memodifikasi lingkungan dalam registri.
Saya belum dapat menemukan variabel-variabel itu di tab Lingkungan yang ditunjukkan oleh Process Explorer untuk proses apa pun yang terkait dengan sesi login pengguna.
Karena setiap perubahan yang Anda buat dengan set
hanya akan terlihat di yang spesifik command prompt dan setiap proses yang Anda memulai dari yang spesifik command prompt; perubahan tidak merambat ke proses lain.
Pertanyaan saya adalah di mana nilai-nilai itu disimpan, dan mengapa Process Explorer tidak dapat mengaksesnya (tentu saja, karena Proses Explorer berjalan dinaikkan secara default variabel-variabel tersebut muncul di tab Lingkungan sendiri)? Atau apakah saya hanya mengabaikan mereka?
Variabel sesi disimpan di lingkungan prompt perintah tertentu itu. Process Explorer dapat melihatnya untuk contoh spesifik tersebut cmd
, tetapi mereka tidak akan berada dalam proses lain. Jika Anda meluncurkan program dari prompt perintah itu, maka Anda dapat melihat perubahan itu di tab Lingkungan proses anak di Process Explorer karena itu akan mewarisinya dari prompt perintah itu.
Jika Anda menggunakan program suka setx
mengatur variabel persisten, maka mereka akan disimpan dalam registri. Jika Anda menetapkan variabel tingkat pengguna (untuk pengguna saat ini), variabel itu akan disimpan di HKCU\Environment
(atau HKU\<USER>\Environment
untuk pengguna lain). Jika Anda mengatur variabel tingkat sistem, maka variabel itu akan disimpan HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
.
Ketahuilah bahwa jika Anda memodifikasi lingkungan secara manual melalui registri, hanya proses baru yang akan mengambil perubahan. Untuk mendapatkan proses yang ada untuk melihat perubahan, Anda harus me-restart atau menyiarkan WM_SETTINGCHANGE
pesan. (Alat seperti setx
menyiarkan pesan ke semua jendela tingkat atas.)