Podniosłem prawa do mojego laptopa, ale nie mam uprawnień administratora. Do modyfikowania zmiennych środowiskowych systemu wymagane są uprawnienia administratora. Spodziewałem się, że jeśli utworzę zmienną środowiskową użytkownika o takiej samej nazwie jak systemowa zmienna środowiskowa, zmienna użytkownika zastąpi zmienną systemową, ale wydaje się, że tak nie jest.
Po dodaniu zmiennej użytkownika o tej samej nazwie co zmienna systemowa otworzyłem nowe okno cmd i użyłem polecenia echo, aby wyświetlić zmienną. Pokazało mi wartość zmiennej systemowej zamiast wartości zmiennej użytkownika.
Chciałem tylko potwierdzić, że jest to oczekiwane zachowanie i zrozumieć uzasadnienie. Spodziewałbym się, że bardziej szczegółowe ustawienia użytkownika zastąpią ustawienia systemowe.
Mam system Windows 7.
Odpowiedzi:
Zgodnie z artykułem MSKB Zmienne środowiskowe w systemie Windows NT :
Jednym godnym uwagi wyjątkiem jest
PATH
zmienna będąca połączonym wynikiem zmiennych systemowych i użytkownika:W artykule omówiono również identyczne wyjątki dotyczące interpretacji zmiennych
LibPath
iOs2LibPath
, a także sposób obsługi tych określonych wautoexec.bat
. Punkty te prawdopodobnie nie będą miały większego znaczenia w dzisiejszych typowych środowiskach.Podziękowania dla odpowiedzi SO
źródło
Wszystko, co powiedział Twisty Impersonator w swojej odpowiedzi, jest poprawne. Podkreślono pomysł dodania zmiennej ścieżki użytkownika i uważam, że konsekwencje tej różnicy wymagają dodatkowego potraktowania.
Po uruchomieniu program wykonywalny (lub dowolny skrypt wykonywalny, takich jak
.bat
,.vbs
itd) nie trzeba, aby zapewnić pełną ścieżkę.Na przykład, aby uruchomić
java
, możesz wpisać dowolny z tych:Pierwszy przykład wykorzystuje w pełni kwalifikowaną ścieżkę. To zawsze będzie używać wersji Java pod tą samą ścieżką.
Drugi przykład przejdzie przez każdy katalog w
%Path%
zmiennej środowiskowej, szukając pliku wykonywalnego o nazwiejava.exe
. Uruchomi pierwszy znaleziony i przestanie szukać. Jeśli istnieją dwa pliki o nazwiejava.exe
gdzieś na%Path%
stosowany jest tylko pierwszy znaleziony.Trzeci przykład, podobnie jak drugi, będzie iterował katalogi wymienione w
%Path%
. Ponadto, ponieważ nie podano rozszerzenia pliku, do nazwy pliku dołączana jest lista wykonywalnych rozszerzeń plików w kolejności określonej w%PATHEXT%
zmiennej środowiskowej. Jeśli istnieje kilka plików o nazwachjava.com
,java.exe
,java.bat
, itd. Gdzieś na%Path%
stosowany jest tylko pierwszy znaleziony.Możesz wyświetlić listę wykonywalnych rozszerzeń ścieżek w systemie, tworząc następujący plik wsadowy:
Na moim komputerze są to:
Co to wszystko znaczy?
W przeciwieństwie do innych zmiennych środowiskowych ścieżka użytkownika nie pozwala na przesłonięcie ścieżki systemowej. Jest dokładnie odwrotnie. Z powyższych przykładów jest wiele przypadków, w których możesz zmienić domyślną wersję Java. Jeśli jednak w ścieżce systemowej znajduje się już wersja Java, jest to wersja ZAWSZE znajdowana jako pierwsza, ponieważ ścieżka jest przeszukiwana w kolejności od lewej do prawej, a ścieżka użytkownika jest dołączana po prawej stronie - ręka, ze ścieżką systemową po lewej stronie.
Co mogę z tym zrobić?
Jeśli nie masz dostępu do systemowych zmiennych środowiskowych, nie możesz zastąpić domyślnych programów na ścieżce systemowej przy użyciu ścieżki użytkownika. (W rzeczywistości musi tak być, w przeciwnym razie niektóre programy przestałyby działać poprawnie i otworzyłyby system na próby manipulacji przez złośliwe oprogramowanie. Nikt tego nie chce).
Zamiast tego musisz użyć w pełni kwalifikowanej ścieżki, jeśli musisz użyć określonej wersji.
źródło