เหตุใดการเปลี่ยนแปลงในเส้นทางของฉันจึงไม่ได้รับการยอมรับ


36

เมื่อฉันอัปเดต PATH ของฉันโดยใช้กล่องโต้ตอบ Environment Variables ในตัวหรือสิ่งอื่นเช่นPath Editorจากนั้นเปิด command-prompt การเปลี่ยนแปลง PATH ของฉันจะไม่ลงทะเบียนกับคอนโซลขึ้นอยู่กับตำแหน่งที่ command-prompt เป็น เริ่มจาก

ตัวอย่างเช่นหากฉันแก้ไขเส้นทางของฉันแล้วเริ่ม cmd.exe จากเมนูเริ่มหรือทางลัดบนเดสก์ท็อปแล้วเส้นทางของฉันดูดี: มันได้รับการปรับปรุงเรียบร้อยแล้ว แต่ถ้าฉันเริ่มต้น cmd.exe จากทางลัดที่อื่นนอกเหนือจากเมนูเริ่มหรือเดสก์ท็อป PATH ใหม่จะไม่ได้รับการอ่านและฉันจะได้รับเส้นทางเก่าแทน มันแปลกมาก

ฉันลองเรียกใช้พรอมต์คำสั่งจากทางลัดบนเดสก์ท็อปและทำงานได้ดี จากนั้นฉันก็คัดลอกทางลัดเดียวกันนั้นไปยังโฟลเดอร์ย่อยบนเดสก์ท็อปและฉันพบปัญหา PATH ที่ไม่อัปเดต

ฉันรู้ว่ามันค่อนข้างยากที่จะอธิบายดังนั้นฉันจึงสร้างscreencast เพื่อแสดงให้เห็นปัญหาที่เกิดขึ้น

นี่เป็นสกรีนช็อตของทางลัดของพรอมต์คำสั่งตามที่เห็นใน screencast นั้น:

การตั้งค่าทางลัดพร้อมรับคำสั่ง

นี่คือใน Windows Vista Home Premium SP2

คำตอบ:


30

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


2
อย่างไรก็ตามexplorerกระบวนการหลักจะตรวจจับการเปลี่ยนแปลงสภาพแวดล้อมใน Registry (กล่องโต้ตอบเป็นของrundll32) และปรับปรุงสภาพแวดล้อมของตัวเองโดยอัตโนมัติ (อย่างน้อยก็ใน XP ทำเช่นนั้น) นี่คือสาเหตุที่การเปลี่ยนแปลงปรากฏเมื่อเริ่มต้นcmdจากทางลัด
grawity

Rowland สิ่งนี้ทำให้ฉันมีข้อมูลมากพอที่จะแก้ไขปัญหาได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นแม้ว่าจะไม่ได้ตอบคำถามของฉันทั้งหมด ดูคำตอบของฉันเองสำหรับรายละเอียด ขอบคุณ!
Charles Roper

ขอบคุณสำหรับคำตอบนี้! สิ่งที่ฉันต้องทำคือปิดพรอมต์คำสั่งของฉันแล้วเปิดอีกครั้ง
user1477388

นี่คือทางออกสำหรับฉัน! ฉันใช้ Git Bash สำหรับ Windows ในเครื่องห่อหุ้มมัลติทาสก์ (ConEmu) และสงสัยว่าทำไมecho $PATHไม่ทำงาน ฉันคิดว่ามันจะสด แต่ไม่ออกมาจนกว่าฉันจะปิดแท็บ Git Bash และ ConEmu ทั้งหมด
Oliv Utilo

27

ดังที่ Rowland แนะนำเมื่อเริ่มต้นกระบวนการใหม่มันจะอ่านตัวแปรสภาพแวดล้อมจากกระบวนการที่กำลังเริ่มต้น ดังนั้นเมื่อเริ่มต้นพรอมต์คำสั่งจากเมนูเริ่มหรือเดสก์ท็อปมันจะอ่านตัวแปรสภาพแวดล้อมexplorer.exeซึ่ง grawity แนะนำตรวจจับการเปลี่ยนแปลงการตั้งค่าสภาพแวดล้อมในรีจิสทรีและทำให้ฉันเห็นเส้นทางใหม่ของฉันในพรอมต์คำสั่งเริ่มต้นจาก สก์ท็อปหรือเมนูเริ่ม

เหตุผลที่ฉันไม่เห็นการอัปเดต PATH ของฉันใน screencast ที่ฉันโพสต์นั้นเป็นเพราะตอนแรกฉันได้เปิดหน้าต่าง explorer โดยใช้FARR ซึ่งทำให้FindAndRunRobot.exeกระบวนการหลัก FARR ไม่ตรวจจับการเปลี่ยนแปลงของสภาพแวดล้อมโดยอัตโนมัติดังนั้นกระบวนการลูกที่เกิดจากมันจะไม่ได้รับ PATH ใหม่ ฉันยังมีตัวเลือก ' เรียกใช้โฟลเดอร์ windows ในกระบวนการแยกต่างหาก ' ซึ่งตั้งอยู่ใน Explorer ซึ่งหมายความว่าหน้าต่าง explorer.exe ทั้งหมดที่ฉันเปิดหลังจากเปิดครั้งแรกโดย FARR ซึ่งเป็นลูกของ FARRด้วย

ด้วยการปิดตัวเลือก ' เรียกใช้หน้าต่างโฟลเดอร์ในกระบวนการแยกต่างหาก ' กระบวนการใหม่explorer.exeไม่ได้ถูกสร้างขึ้นภายใต้ FARR ซึ่งแก้ปัญหาของฉันได้ อย่างไรก็ตามฉันยังเปิดหน้าต่างคอนโซลและสิ่งอื่น ๆ โดยตรงจาก FARR; สิ่งเหล่านี้ยังได้รับการตั้งค่าสภาพแวดล้อมเก่า ถ้าฉันรีสตาร์ท FARR การตั้งค่าสภาพแวดล้อมใหม่จะถูกเผยแพร่

นี่คือภาพหน้าจอของ Process Explorer ที่แสดงกระบวนการที่เกิดจาก FARR ไม่มีกระบวนการใดที่ได้รับการตั้งค่าสภาพแวดล้อมใหม่จากระดับบนสุดexplorer.exeเว้นแต่ฉันจะรีสตาร์ท FARR:

สำรวจกระบวนการ


3
ทำไมคำตอบของฉันถูกโหวต หากมีข้อบกพร่องแจ้งให้ฉันทราบและฉันจะพยายามแก้ไข
Charles Roper

ทำให้รู้สึกที่ดี
lwpro2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.