ผู้ใช้กับตัวแปรสภาพแวดล้อมของระบบ: ตัวแปรระบบแทนที่ตัวแปรผู้ใช้หรือไม่


21

ฉันมีสิทธิ์ในการยกระดับแล็ปท็อปของฉัน แต่ไม่ใช่สิทธิ์ของผู้ดูแลระบบ จำเป็นต้องมีสิทธิ์ผู้ดูแลระบบเพื่อแก้ไขตัวแปรสภาพแวดล้อมของระบบ ฉันคาดว่าถ้าฉันสร้างตัวแปรสภาพแวดล้อมของผู้ใช้ที่มีชื่อเดียวกันกับตัวแปรสภาพแวดล้อมของระบบตัวแปรผู้ใช้จะแทนที่ตัวแปรระบบ แต่สิ่งนี้ดูเหมือนจะไม่เป็นเช่นนั้น

หลังจากเพิ่มตัวแปรผู้ใช้ชื่อเดียวกันกับตัวแปรระบบฉันเปิดหน้าต่าง cmd ใหม่และใช้คำสั่งechoเพื่อแสดงตัวแปร มันแสดงให้ฉันเห็นค่าของตัวแปรระบบแทนค่าของตัวแปรผู้ใช้

ฉันแค่ต้องการยืนยันว่านี่เป็นพฤติกรรมที่คาดหวังและเข้าใจเหตุผลที่อยู่เบื้องหลัง ฉันคาดว่าการตั้งค่าผู้ใช้ที่เฉพาะเจาะจงมากขึ้นเพื่อแทนที่ระบบหนึ่ง

ฉันมี Windows 7


เมื่อคุณเปลี่ยนตัวแปรบ่อยครั้งที่คุณต้องรีสตาร์ท Windows ให้สมบูรณ์ การเปลี่ยนตัวแปรในการตั้งค่าจะไม่เปลี่ยนแปลงกระบวนการที่กำลังทำงานอยู่ กระบวนการใหม่คัดลอกสภาพแวดล้อมจากกระบวนการทำงาน (ขึ้นอยู่กับวิธีการเริ่มต้น) ดังนั้นการเริ่มต้นกระบวนการไม่ได้หมายความว่าคุณจะได้รับสภาพแวดล้อมใหม่
Zoredache

ฉันรีบูทและยังเมื่อฉันเรียกใช้ "echo% path%" จากหน้าต่าง cmd.exe มันจะแสดงตัวแปร env ระบบของฉันไม่ใช่ค่าของตัวแปรผู้ใช้ ดังนั้นฉันจึงลบตัวแปรผู้ใช้, การเข้าถึงของผู้ดูแลระบบ, เปลี่ยนตัวแปรระบบพา ธ ของฉันและ echo cmd เหมือนกัน ค่า env ที่อัพเดตถูกแสดงโดยไม่มีการรีบูต สิ่งนี้บอกฉันว่า USER vars ไม่ได้แทนที่ vars ของระบบและไม่จำเป็นต้องรีบูต Neitehr เป็นสิ่งที่ฉันคาดไว้
ชาด

ขั้นตอนสิ่งที่ใช้สำหรับการเพิ่มตัวแปรของผู้ใช้ชื่อเดียวกับชื่อตัวแปรระบบ ? สิ่งที่ชอบ ?
JosefZ

JosefZ: ใช่ฉันเพิ่มตัวแปรสภาพแวดล้อมสองตัวคือ USER อีกตัวหนึ่งซึ่งทั้งสองระบบใช้ชื่อเดียวกันโดยใช้ GUI Windows 7 GUI คล้ายกับหน้าจอที่แสดงลิงค์ของคุณ
Chad

@Chad ไม่ใช่คำตอบที่คุณยอมรับด้านล่างตรงข้ามกับประสบการณ์ของคุณใช่ไหม คุณอธิบายความแตกต่างได้อย่างไร
RockPaperLizard

คำตอบ:


25

ตามบทความ MSKB ตัวแปรสภาพแวดล้อมใน Windows NT :

ตัวแปรสภาพแวดล้อมของผู้ใช้ .... มีความสำคัญเหนือกว่าตัวแปรสภาพแวดล้อมของระบบ

ข้อยกเว้นที่น่าสังเกตอย่างหนึ่งคือPATHตัวแปรซึ่งเป็นผลรวมของระบบและตัวแปรผู้ใช้:

เส้นทางถูกสร้างจากเส้นทางของระบบซึ่งสามารถดูได้ในฟิลด์ตัวแปรสภาพแวดล้อมของระบบในกล่องโต้ตอบระบบ เส้นทางผู้ใช้ถูกผนวกเข้ากับเส้นทางของระบบ

บทความนี้ยังกล่าวถึงข้อยกเว้นเหมือนกันสำหรับการขยายตัวของLibPathและOs2LibPathตัวแปรเช่นเดียวกับวิธีที่ระบุไว้ในautoexec.batได้รับการจัดการ จุดเหล่านี้มีแนวโน้มที่จะพบความเกี่ยวข้องเพียงเล็กน้อยในสภาพแวดล้อมทั่วไปในปัจจุบัน

ให้เครดิตกับคำตอบ SO นี้


2
เป็นไปได้ไหมที่จะทำให้พา ธ ของผู้ใช้กำลังเตรียมเส้นทางของระบบ?
Qwerty

3

ทุกอย่างที่ผู้แอบอ้าง Twistyกล่าวในคำตอบนั้นถูกต้อง แนวคิดที่ว่าตัวแปรเส้นทางผู้ใช้ถูกต่อท้ายได้รับการเน้นและฉันเชื่อว่าผลที่ตามมาของความแตกต่างนั้นต้องมีการรักษาเพิ่มเติม

Path =% Path% (ระบบ); % พา ธ % (ผู้ใช้)

เมื่อคุณรันโปรแกรมปฏิบัติการ (หรือสคริปต์ที่ปฏิบัติการใด ๆ เช่น.bat, .vbsฯลฯ ) คุณไม่จำเป็นต้องให้เส้นทางที่มีคุณสมบัติครบถ้วน

ตัวอย่างเช่นหากต้องการเรียกใช้javaคุณสามารถพิมพ์ใด ๆ ต่อไปนี้:

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

java.exe -version

java -version

ตัวอย่างแรกใช้เส้นทางที่ผ่านการรับรองโดยสมบูรณ์ สิ่งนี้จะใช้เวอร์ชันของ Java ที่เส้นทางที่แน่นอนเสมอ

ตัวอย่างที่สองจะผ่านแต่ละไดเรกทอรีใน%Path%ตัวแปรสภาพแวดล้อมค้นหาไฟล์เรียกทำงานjava.exeได้ มันจะเรียกใช้สิ่งแรกที่พบและหยุดการค้นหา หากมีสองไฟล์ตั้งชื่อjava.exeบางแห่งในไฟล์%Path%จะใช้เฉพาะไฟล์แรกที่พบ

%Path%ตัวอย่างที่สามเช่นสองจะย้ำกว่าไดเรกทอรีที่ระบุไว้ใน นอกจากนี้เนื่องจากไม่มีการระบุนามสกุลไฟล์รายการของนามสกุลไฟล์ที่เรียกทำงานได้จะถูกผนวกเข้ากับชื่อของไฟล์ตามลำดับที่ระบุใน%PATHEXT%ตัวแปรสภาพแวดล้อม หากมีหลายไฟล์ชื่อjava.com, java.exeและjava.batอื่น ๆ ในไฟล์%Path%จะใช้เฉพาะไฟล์แรกที่พบ

คุณสามารถดูรายการส่วนขยายพา ธ ที่สามารถเรียกใช้งานได้บนระบบของคุณโดยสร้างไฟล์แบตช์ต่อไปนี้:

@echo off
echo %PATHEXT%
pause

บนเครื่องของฉันเหล่านี้คือ:

.COM; .EXE; ค้างคาว; .cmd; .vbs; .VBE; .js; .JSE; .WSF; .WSH; .MSC; .py

ทั้งหมดนี้หมายความว่าอย่างไร

ในทางตรงกันข้ามกับตัวแปรสภาพแวดล้อมอื่น ๆ เส้นทางผู้ใช้ไม่อนุญาตให้คุณแทนที่เส้นทางของระบบ ตรงกันข้ามคือกรณี จากตัวอย่างด้านบนมีหลายกรณีที่คุณอาจจะต้องเปลี่ยนจาวารุ่นเริ่มต้น อย่างไรก็ตามหากมีรุ่น Java อยู่ในรายการเส้นทางของระบบนั่นคือรุ่นที่จะต้องพบก่อนเสมอเนื่องจากเส้นทางนั้นถูกค้นหาตามลำดับจากซ้ายไปขวาและเส้นทางของผู้ใช้จะถูกผนวกเข้าทางด้านขวา - ด้านที่มีพา ธ ของระบบด้านซ้าย

ฉันจะทำอะไรได้บ้าง

หากคุณไม่สามารถเข้าถึงตัวแปรสภาพแวดล้อมระบบคุณไม่สามารถแทนที่โปรแกรมเริ่มต้นบนเส้นทางของระบบโดยใช้เส้นทางผู้ใช้ (อันที่จริงแล้วต้องเป็นเช่นนี้หรือบางโปรแกรมจะหยุดทำงานอย่างถูกต้องและจะเปิดระบบของคุณเพื่อแก้ไขปัญหาโดยซอฟต์แวร์ที่เป็นอันตรายไม่มีใครต้องการสิ่งนั้น)

คุณต้องใช้เส้นทางที่ผ่านการรับรองโดยสมบูรณ์หากคุณต้องใช้เวอร์ชันที่ระบุ


1
เป็นไปได้ไหมที่จะทำให้พา ธ ของผู้ใช้กำลังเตรียมเส้นทางของระบบ?
Qwerty

1
นั่นจะเป็นหัวข้อที่ดีสำหรับคำถามอื่น (การค้นหาอย่างรวดเร็วในเว็บไซต์นี้ไม่ได้เปิดเผยอะไรที่เกี่ยวข้องทันที) โปรดอย่าลังเลที่จะถามคำถามใหม่และโพสต์ลิงค์ไปที่นี่ในความคิดเห็น!
JonathanDavidArndt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.