Kullanıcı ve Sistem Ortamı Değişkenleri: Sistem Değişkenleri Kullanıcı Değişkenlerini Geçersiz Kılar mı?


21

Dizüstü bilgisayarımın haklarını yükselttim ancak yönetici haklarını kullanmadım. Sistem ortamı değişkenlerini değiştirmek için yönetici hakları gerekir. Bir sistem ortamı değişkeni ile aynı ada sahip bir kullanıcı ortamı değişkeni oluşturduğumda, kullanıcı değişkeninin sistem değişkenini geçersiz kılacağını, ancak bu durumun böyle görünmediğini bekledim.

Sistem değişkeniyle aynı ada sahip bir kullanıcı değişkeni ekledikten sonra, yepyeni bir cmd penceresi açtım ve değişkeni görüntülemek için echo komutunu kullandım . Bana kullanıcı değişkeninin değeri yerine sistem değişkeninin değerini gösterdi.

Sadece bunun beklenen davranış olduğunu doğrulamak ve bunun ardındaki mantığı anlamak istedim. Daha özel bir kullanıcı ayarı sistem birini geçersiz kılmak için beklenir.

Windows 7 kullanıyorum.


Değişkenleri değiştirdiğinizde, Windows'u tamamen yeniden başlatmanız gerekir. Ayarlarda bir değişkenin değiştirilmesi çalışan işlemleri değiştirmez. Yeni işlemler, ortamı çalışan işlemlerden kopyalar (nasıl başlatıldıklarına bağlı olarak), bu nedenle bir işlemi başlatmak yeni bir ortam elde edeceğiniz anlamına gelmez.
Zoredache

Yeniden başlattım ve yine de bir cmd.exe penceresinden "echo% path%" komutunu çalıştırdığımda, kullanıcı değişkeninin değerini değil, sistem env değişkenini görüntüler. Bu yüzden, Kullanıcı değişkenini sildim, o Yönetici erişimi, Sistem yolu değişkenimi değiştirdim ve aynı yankı cmd'yi değiştirdim. Güncellenen env değeri, yeniden başlatma olmadan görüntülenir. Bu, USER değişkenlerinin sistem değişkenlerini geçersiz kılmadığını ve yeniden başlatmanın gerekli olmadığını belirtir. Neitehr beklediğim bu.
Çad

Sistem değişkeniyle aynı ada sahip bir kullanıcı değişkeni eklemek için hangi yordam kullanılır ? Gibi bir şey ?
JosefZ

JosefZ: Evet, bağlantınızdaki ekranlara benzer Windows 7 GUI kullanarak iki ortam değişkeni ekledim, biri SİSTEMİN her ikisini de aynı ada sahip.
Çad

@Chad Kabul ettiğiniz cevap, deneyiminizin tam tersi değil mi? Tutarsızlığı nasıl açıklıyorsunuz?
RockPaperLizard

Yanıtlar:


25

Windows NT ortam değişkenleri MSKB makalesine göre :

Kullanıcı ortam değişkenleri .... sistem ortam değişkenlerine göre önceliklidir.

Unutulmaması gereken, PATHbir büyüklüğün, kombine sistem ve kullanıcı değişkenlerin sonucu:

Yol, Sistem iletişim kutusundaki Sistem Ortamı Değişkenleri alanında görüntülenebilen sistem yolundan oluşturulur. Kullanıcı yolu sistem yoluna eklenir.

Makale ayrıca LibPathve Os2LibPathdeğişkenlerinin genişletilmesi ile aynı istisnaları ve belirtilenlerin nasıl autoexec.batele alınacağını tartışmaktadır . Bu noktaların günümüzün tipik ortamlarında çok az önem bulması muhtemeldir.

Bu SO cevabına verilen kredi


2
Kullanıcı yolunu Sistem yolundan önce yapmak mümkün müdür?
Qwerty

3

Twisty Impersonator'ın yanıtlarında söylediği her şey doğrudur. Kullanıcı yolu değişkeninin eklendiği fikri vurgulanmıştır ve bu farkın sonuçlarının ek bir tedavi gerektirdiğine inanıyorum.

Yol =% Yol% (Sistem); % Yol% (Kullanıcı)

Eğer (gibi ya da herhangi bir yürütülebilir komut dosyası, bir yürütülebilir program çalıştırdığınızda .bat, .vbsvs.) Eğer tam yolunu sağlamak gerekmez.

Örneğin, çalıştırmak javaiçin aşağıdakilerden herhangi birini yazabilirsiniz:

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

java.exe -version

java -version

İlk örnek tam nitelikli bir yol kullanır. Bu, Java sürümünü her zaman tam olarak kullanır.

İkinci örnek, %Path%ortam değişkenindeki her bir dizinde, adlı yürütülebilir dosyayı arayarak geçer java.exe. İlk bulunanı çalıştırır ve aramayı durdurur. Üzerinde bir yerde iki dosya varsa , sadece ilk bulunan dosya kullanılır.java.exe%Path%

Üçüncü örnek, ikincisi gibi, 'de listelenen dizinleri yineleyecektir %Path%. Ayrıca, bir dosya uzantısı sağlanmadığı için, yürütülebilir dosya uzantılarının listesi %PATHEXT%ortam değişkeninde belirtilen sırayla dosyanın adına eklenir . Olarak adlandırılan bir kaç dosya varsa java.com, java.exe, java.batüzerinde, vb yerlerde %Path%, sadece ilk bir tane buldum kullanılır.

Aşağıdaki toplu iş dosyasını oluşturarak sisteminizdeki yürütülebilir yol uzantılarının listesini görebilirsiniz:

@echo off
echo %PATHEXT%
pause

Makinemde bunlar:

.COM, .exe, BAT, .CMD; .VBS; .VBE; .JS; .JSE; .wsf; .WSH; .msc; .py

Bütün bunlar ne anlama geliyor?

Gelen tezat diğer çevre değişkeni, kullanıcı yol sistem yolunu geçersiz kılmak için izin vermez. Tam tersi durum söz konusudur. Yukarıdaki örneklerden, Java'nın varsayılan sürümünü değiştirmek için kullanabileceğiniz birçok durum vardır. Ancak, sistem yolunda listelenmiş bir Java sürümü varsa, bu yol her zaman ilk sırada bulunur, çünkü yol sırayla, soldan sağa aranır ve kullanıcı yolu sağa eklenir sol taraftaki sistem yolu ile.

Bu konuda ne yapabilirim?

Sistem ortamı değişkenlerine erişiminiz yoksa, kullanıcı yolunu kullanarak sistem yolundaki varsayılan programları geçersiz kılamazsınız. (Aslında, bu şekilde olmalı veya bazı programlar düzgün çalışmayı durduracak ve sisteminizi kötü amaçlı yazılımların kurcalanmasına açacaktır. Kimse bunu istemez.)

Bunun yerine, belirli bir sürümü kullanmanız gerekiyorsa tam nitelikli bir yol kullanmanız gerekir.


1
Kullanıcı yolunu Sistem yolundan önce yapmak mümkün müdür?
Qwerty

1
Bu farklı bir soru için iyi bir konu olurdu. (Bu sitede yapılan hızlı bir arama hemen alakalı bir şey ortaya koymadı.) Lütfen yeni bir soru sormaktan çekinmeyin ve yorumlarda buraya bir bağlantı gönderin!
JonathanDavidArndt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.