Biến người dùng so với môi trường hệ thống: Biến hệ thống có ghi đè biến người dùng không?


21

Tôi đã nâng cao quyền đối với máy tính xách tay của mình nhưng không có quyền quản trị viên. Quyền quản trị được yêu cầu để sửa đổi các biến môi trường hệ thống. Tôi hy vọng rằng nếu tôi tạo một biến môi trường người dùng có cùng tên với biến môi trường hệ thống, biến người dùng sẽ ghi đè biến hệ thống nhưng điều này dường như không xảy ra.

Sau khi thêm một biến người dùng cùng tên với một biến hệ thống, tôi đã mở một cửa sổ cmd hoàn toàn mới và sử dụng lệnh echo để hiển thị biến đó. Nó cho tôi thấy giá trị của biến hệ thống thay vì giá trị của biến người dùng.

Tôi chỉ muốn xác nhận đây là hành vi dự kiến ​​và hiểu lý do đằng sau nó. Tôi hy vọng cài đặt người dùng cụ thể hơn sẽ ghi đè lên hệ thống.

Tôi có Windows 7.


Khi bạn thay đổi các biến, bạn thường phải khởi động lại hoàn toàn Windows. Thay đổi một biến trong cài đặt sẽ không thay đổi các quy trình đang chạy. Các quy trình mới sao chép môi trường từ các quy trình đang chạy (tùy thuộc vào cách chúng được bắt đầu), vì vậy chỉ cần bắt đầu một quy trình không có nghĩa là bạn có được một môi trường mới.
Zoredache

Tôi đã khởi động lại và khi tôi chạy "echo% path%" từ cửa sổ cmd.exe, nó sẽ hiển thị biến env hệ thống của tôi chứ không phải giá trị của biến người dùng. Vì vậy, tôi đã xóa biến Người dùng, o Quyền truy cập của Quản trị viên, đã thay đổi biến Đường dẫn hệ thống của tôi và đã lặp lại cùng một cmd. Giá trị env được cập nhật đã được hiển thị khi khởi động lại. Điều này cho tôi biết rằng các vars USER không ghi đè các vars hệ thống và việc khởi động lại là không cần thiết. Neitehr là những gì tôi mong đợi.
Chad

Quy trình nào được sử dụng để thêm một biến người dùng cùng tên với biến hệ thống ? Một cái gì đó như thế nào?
JosefZ

JosefZ: có, tôi đã thêm hai biến môi trường, một NGƯỜI DÙNG HỆ THỐNG khác, cả hai đều có cùng tên, sử dụng GUI Windows 7 tương tự như các màn hình hiển thị liên kết của bạn.
Chad

@Chad Không phải là câu trả lời bạn chấp nhận dưới đây hoàn toàn trái ngược với kinh nghiệm của bạn? Làm thế nào để bạn giải thích sự khác biệt?
RockPaperLizard

Câu trả lời:


25

Theo bài viết Các biến môi trường của MSKB trong Windows NT :

Biến môi trường người dùng .... được ưu tiên hơn các biến môi trường hệ thống.

Một ngoại lệ đáng chú ý là PATHbiến là kết quả tổng hợp của biến hệ thống và biến người dùng:

Đường dẫn được xây dựng từ đường dẫn hệ thống, có thể được xem trong trường Biến môi trường hệ thống trong hộp thoại Hệ thống. Đường dẫn người dùng được gắn vào đường dẫn hệ thống.

Bài viết cũng thảo luận về các ngoại lệ giống hệt nhau cho việc mở rộng các biến LibPathOs2LibPathbiến cũng như cách autoexec.batxử lý các biến được chỉ định trong . Những điểm này có khả năng tìm thấy ít liên quan trong môi trường điển hình ngày nay.

Tín dụng cho câu trả lời SO này


2
Có thể tạo đường dẫn Người dùng chuẩn bị đường dẫn Hệ thống không?
Qwerty

3

Tất cả những gì mà Twisty Impersonator nói trong câu trả lời của họ là chính xác. Ý tưởng rằng biến đường dẫn người dùng được thêm vào đã được nêu bật và tôi tin rằng hậu quả của sự khác biệt đó đòi hỏi một số điều trị bổ sung.

Đường dẫn =% Đường dẫn% (Hệ thống); % Đường dẫn% (Người dùng)

Khi bạn thực hiện một chương trình thực thi (hoặc bất kỳ kịch bản thực thi, chẳng hạn như .bat, .vbsvv), bạn không cần phải cung cấp đầy đủ đường dẫn.

Ví dụ, để chạy java, bạn có thể nhập bất kỳ thứ nào trong số này:

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

java.exe -version

java -version

Ví dụ đầu tiên sử dụng một đường dẫn đầy đủ. Điều này sẽ luôn sử dụng phiên bản Java tại đường dẫn chính xác đó.

Ví dụ thứ hai sẽ đi qua từng thư mục trong %Path%biến môi trường, tìm kiếm một tệp thực thi có tên java.exe. Nó sẽ chạy cái đầu tiên được tìm thấy và ngừng tìm kiếm. Nếu có hai tệp được đặt tên java.exeở đâu đó trên %Path%, chỉ có tệp đầu tiên được tìm thấy được sử dụng.

Ví dụ thứ ba, như ví dụ thứ hai, sẽ lặp qua các thư mục được liệt kê trong %Path%. Ngoài ra, do phần mở rộng tệp không được cung cấp, nên một danh sách các phần mở rộng tệp thực thi được thêm vào tên của tệp, theo thứ tự được chỉ định trong %PATHEXT%biến môi trường. Nếu có một số tập tin có tên java.com, java.exe, java.batvv ở đâu đó trên %Path%, chỉ có một tìm thấy đầu tiên được sử dụng.

Bạn có thể xem danh sách các phần mở rộng đường dẫn thực thi trên hệ thống của mình bằng cách tạo tệp bó sau:

@echo off
echo %PATHEXT%
pause

Trên máy của tôi, đây là:

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

Tất cả điều này có nghĩa là gì?

Trong chiều ngược lại để biến môi trường khác, con đường dùng không cho phép bạn ghi đè lên các đường dẫn hệ thống. Hoàn toàn ngược lại là trường hợp. Từ các ví dụ trên, có nhiều trường hợp bạn có thể thay đổi phiên bản mặc định của Java. Tuy nhiên, nếu đã có phiên bản Java được liệt kê trong đường dẫn hệ thống, thì đó là phiên bản LUÔN LUÔN được tìm thấy trước tiên, bởi vì đường dẫn được tìm kiếm theo thứ tự, từ trái sang phải và đường dẫn người dùng được nối ở bên phải bên tay, với đường dẫn hệ thống bên trái.

Tôi có thể làm gì với nó?

Nếu bạn không có quyền truy cập vào các biến môi trường hệ thống, bạn không thể ghi đè các chương trình mặc định trên đường dẫn hệ thống bằng cách sử dụng đường dẫn người dùng. (Trên thực tế, nó phải theo cách này hoặc một số chương trình nhất định sẽ ngừng hoạt động chính xác và nó sẽ mở hệ thống của bạn để giả mạo phần mềm độc hại. Không ai muốn điều đó.)

Thay vào đó, bạn phải sử dụng một đường dẫn đủ điều kiện nếu bạn phải sử dụng một phiên bản cụ thể.


1
Có thể tạo đường dẫn Người dùng chuẩn bị đường dẫn Hệ thống không?
Qwerty

1
Đó sẽ là một chủ đề tốt cho một câu hỏi khác. (Một tìm kiếm nhanh trên trang web này không tiết lộ bất cứ điều gì có liên quan ngay lập tức.) Xin vui lòng đặt câu hỏi mới và gửi một liên kết đến nó ở đây trong các bình luận!
JonathanDavidArndt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.