Variabel Lingkungan vs. Pengguna Sistem: Apakah Variabel Sistem Menggantikan Variabel Pengguna?

21

Saya memiliki hak yang tinggi untuk laptop saya tetapi bukan hak admin. Hak admin diperlukan untuk memodifikasi variabel lingkungan sistem. Saya berharap bahwa jika saya membuat variabel lingkungan pengguna dengan nama yang sama dengan variabel lingkungan sistem, variabel pengguna akan menimpa variabel sistem tetapi ini tampaknya bukan kasusnya.

Setelah menambahkan variabel pengguna dengan nama yang sama sebagai variabel sistem, saya membuka jendela cmd baru dan menggunakan perintah gema untuk menampilkan variabel. Ini menunjukkan kepada saya nilai variabel sistem, bukan nilai variabel pengguna.

Saya hanya ingin mengkonfirmasi ini perilaku yang diharapkan dan memahami alasan di baliknya. Saya berharap pengaturan pengguna yang lebih spesifik untuk menimpa sistem.

Saya memiliki Windows 7.

Chad
sumber
Ketika Anda mengubah variabel Anda sering harus me-restart Windows sepenuhnya. Mengubah variabel dalam pengaturan tidak akan mengubah proses yang sedang berjalan. Proses baru menyalin lingkungan dari menjalankan proses (tergantung pada bagaimana mereka dimulai), jadi cukup memulai proses tidak berarti Anda mendapatkan lingkungan baru.
Zoredache
Saya reboot dan masih ketika saya menjalankan "echo% path%" dari jendela cmd.exe, ini akan menampilkan sistem saya variabel env, bukan nilai dari variabel pengguna. Jadi, saya menghapus variabel Pengguna, o Akses admin, mengubah variabel jalur Sistem saya dan melakukan gema cmd yang sama. Nilai env yang diperbarui ditampilkan tanpa me-reboot. Ini memberitahu saya bahwa vars USER tidak mengesampingkan vars sistem dan bahwa reboot tidak diperlukan. Neitehr adalah apa yang saya harapkan.
Chad
Prosedur apa yang digunakan untuk menambahkan variabel pengguna dengan nama yang sama dengan variabel sistem ? Sesuatu seperti ?
JosefZ
JosefZ: ya, saya menambahkan dua variabel lingkungan, satu PENGGUNA SISTEM lainnya, keduanya dengan nama yang sama, menggunakan Windows 7 GUI mirip dengan layar yang ditampilkan dalam tautan Anda.
Chad
@Chad Bukankah jawaban yang Anda terima di bawah ini bertolak belakang dengan pengalaman Anda? Bagaimana Anda menjelaskan perbedaannya?
RockPaperLizard

Jawaban:

25

Menurut variabel lingkungan artikel MSKB di Windows NT :

Variabel lingkungan pengguna .... didahulukan dari variabel lingkungan sistem.

Satu pengecualian penting adalah PATHvariabel yang merupakan hasil gabungan dari variabel sistem dan pengguna:

Path dibuat dari jalur sistem, yang dapat dilihat di bidang Variabel Lingkungan Sistem di kotak dialog Sistem. Jalur Pengguna ditambahkan ke jalur sistem.

Artikel ini juga membahas pengecualian identik untuk perluasan LibPathdan Os2LibPathvariabel serta bagaimana mereka ditentukan dalam autoexec.batditangani. Poin-poin ini cenderung menemukan sedikit relevansi dalam lingkungan khas saat ini.

Terima kasih atas jawaban SO ini

Saya katakan Reinstate Monica
sumber
2
Apakah mungkin untuk membuat lintasan Pengguna menambahkan jalan lintasan Sistem?
Qwerty
3

Segala sesuatu yang Twisty Impersonator katakan dalam jawaban mereka benar. Gagasan bahwa variabel jalur pengguna ditambahkan telah disorot, dan saya percaya konsekuensi dari perbedaan itu memerlukan beberapa perawatan tambahan.

Path =% Path% (Sistem); % Path% (Pengguna)

Ketika Anda menjalankan program dieksekusi (atau script executable, seperti .bat, .vbs, dll) Anda tidak perlu menyediakan lintasan yang memenuhi syarat.

Misalnya, untuk menjalankan java, Anda dapat mengetikkan salah satu dari ini:

C:/Program Files (x86)/Java/jre6/bin/java -version

java.exe -version

java -version

Contoh pertama menggunakan jalur yang sepenuhnya memenuhi syarat. Ini akan selalu menggunakan versi Java di jalur yang tepat itu.

Contoh kedua akan melalui masing-masing direktori di %Path%variabel lingkungan, mencari file yang dapat dieksekusi bernama java.exe. Ini akan menjalankan yang pertama yang ditemukan, dan berhenti mencari. Jika ada dua file bernama java.exesuatu tempat di %Path%, hanya yang pertama ditemukan digunakan.

Contoh ketiga, seperti yang kedua, akan beralih ke direktori yang tercantum dalam %Path%. Selain itu, karena ekstensi file tidak disediakan, daftar ekstensi file yang dapat dieksekusi ditambahkan ke nama file, dalam urutan yang ditentukan dalam %PATHEXT%variabel lingkungan. Jika ada beberapa file yang bernama java.com, java.exe, java.bat, dll di suatu tempat di %Path%, hanya yang pertama berhasil ditemukan digunakan.

Anda dapat melihat daftar ekstensi jalur yang dapat dieksekusi di sistem Anda dengan membuat file batch berikut:

@echo off
echo %PATHEXT%
pause

Di mesin saya, ini adalah:

.COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC; .PY

Apa artinya semua ini?

Dalam kontras dengan variabel lingkungan lainnya, jalur pengguna tidak memungkinkan Anda untuk menimpa sistem jalan. Justru sebaliknya yang terjadi. Dari contoh di atas, ada banyak kasus di mana Anda dapat mengubah versi default Java. Namun, jika sudah ada versi Java yang terdaftar di jalur sistem, itu adalah versi yang akan SELALU ditemukan terlebih dahulu, karena jalur tersebut dicari secara berurutan, dari kiri ke kanan, dan jalur pengguna ditambahkan di sebelah kanan. sisi-sisi, dengan jalur sistem di sebelah kiri.

Apa yang bisa saya lakukan?

Jika Anda tidak memiliki akses ke variabel lingkungan sistem, Anda tidak dapat mengesampingkan program default di jalur sistem dengan menggunakan jalur pengguna. (Sebenarnya, harus seperti ini, atau program tertentu akan berhenti bekerja dengan benar, dan itu akan membuka sistem Anda untuk dirusak oleh perangkat lunak berbahaya. Tidak ada yang menginginkan itu.)

Sebaliknya, Anda harus menggunakan jalur yang sepenuhnya memenuhi syarat jika Anda harus menggunakan versi tertentu.

JonathanDavidArndt
sumber
1
Apakah mungkin untuk membuat lintasan Pengguna menambahkan jalan lintasan Sistem?
Qwerty
1
Itu akan menjadi topik yang bagus untuk pertanyaan yang berbeda. (Pencarian cepat di situs ini tidak mengungkapkan sesuatu yang relevan dengan segera.) Silahkan mengajukan pertanyaan baru, dan posting tautan di sini di komentar!
JonathanDavidArndt