คุณจะเพิ่มตัวแปรสภาพแวดล้อม Windows โดยไม่ต้องบูตเครื่องใหม่ได้อย่างไร


181

ฉันต้องการเพิ่มตัวแปร Environment ลงในเครื่อง Windows (เดสก์ท็อปหรือเซิร์ฟเวอร์) และสามารถใช้งานได้โดยไม่ต้องบูตเครื่องใหม่

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


2
ฉันมีปัญหาเดียวกันนี้ ฉันอ่านบางแห่งว่าการฆ่ากระบวนการ explorer.exe จะอัปเดตตัวแปรและใช้งานได้ จากนั้นฉันก็ต้องเรียกใช้ explorer จากตัวจัดการงาน
user19694

1
คุณต้องปิดพรอมต์คำสั่งและเปิดใหม่อีกครั้งเพื่อให้ตัวแปรพา ธ ของคุณอัปเดต ตัวแปรถูกโหลดเมื่อ cmd เริ่มทำงาน
NiLInfinite

คำตอบ:


162

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

ฉันไม่สามารถบอกได้จากคำอธิบายปัญหาของคุณว่าคุณมีปัญหาอะไรกับปัญหานี้ คุณสามารถบอกเราเพิ่มเติมเกี่ยวกับสถานการณ์เฉพาะที่ไม่ทำงานได้หรือไม่

บทความ KB นี้อาจมีการใช้งาน: วิธีการเผยแพร่ตัวแปรสภาพแวดล้อมไปยังระบบ


2
ตกลงฉันเดาว่าฉันต้องเห็นพฤติกรรมนี้ในบริการที่กำลังทำงานอยู่หรือบางอย่าง ฉันเพิ่มตัวแปรสภาพแวดล้อมใหม่โดยใช้วิธีที่อธิบายไว้ข้างต้น แล้วฉันก็สามารถที่จะเห็นคุณค่าหลังจากที่เปิดขึ้นพร้อมรับคำสั่งใหม่และการใช้คำสั่ง "สะท้อน% <myvar>% ขอบคุณทั้งสำหรับคำตอบของคุณ..
ชาด Braun-Duin

5
สำหรับผู้ใช้ PowerShell ข้อมูลโค้ดนี้อาจเป็นประโยชน์: poshcode.org/2049
Anders Zommarin

8
หากใช้ cmd คุณจะต้องเริ่มใหม่หากเปลี่ยนตัวแปร env
Neil McGuigan

4
เพิ่งติดตั้ง Scala บนพีซีของฉัน แต่ PATH ไม่อัปเดต สันนิษฐานว่า MSI ไม่ได้ออกอากาศข้อความ WM_SETTINGCHANGE ฉันเพิ่มตัวแปรดัมมี่ระบบเช่น CHANGE_TO_UPDATE = z ซึ่งฉันอัปเดตเพื่อให้ข้อความ WM_SETTINGCHANGE - แก้ไขปัญหา
Darren Bishop

3
404 สำหรับลิงค์ :-(
Samoth

63
  1. ในประเภทพรอมต์คำสั่ง: runas /user:yourusername@yourdomain cmd
  2. มันจะเปิดพรอมต์คำสั่งใหม่จากนั้นพิมพ์: taskkill /f /im explorer.exe
  3. จากนั้นพิมพ์: explorer.exe

ทันทีหลังจากปิดพรอมต์คำสั่งทั้งหมดคุณจะเห็นว่าPATHตัวแปรนั้นได้รับการปรับปรุงอย่างแท้จริง

พรอมต์คำสั่งทั้งหมดจะต้องปิด เปิดพรอมต์คำสั่งใหม่อีกครั้งพิมพ์พา ธ แล้วคุณจะเห็นข้อมูลใหม่


6
จากคำตอบทั้งหมดในหน้านี้นี่เป็นคำตอบเดียวที่ได้ผลสำหรับฉัน ขอขอบคุณ!!
coredumperror

2
สิ่งนี้ใช้ได้สำหรับฉัน ฉันคิดว่าปัญหาคือถ้าคุณเรียกใช้ cmd ผ่าน explorer (เพื่อช่วยให้คุณพิมพ์ในเส้นทางยาว) จากนั้น explorer จะไม่ถูกปิดแม้ว่าคุณจะปิดหน้าต่าง explorer ทั้งหมด ขอขอบคุณสำหรับการแก้ปัญหา :)
สตีฟ Mc

ทำงานให้ฉัน คุณยังสามารถใช้ตัวจัดการงานเพื่อฆ่าภารกิจ explorer และเริ่มต้นใหม่ (ไฟล์> เรียกใช้งานใหม่)
adabyron

7
เอ่อ โปรดอย่าฆ่า windows explorer หากกระบวนการใดกระบวนการหนึ่งหยุดทำงาน ให้เปิดหน้าต่างการปิดเครื่องและยกเลิกในขณะที่กดค้างctrl+alt+shiftไว้ ที่จะออกจาก explorer windows อย่างหมดจด ใน Vista + หน้าต่างการปิดระบบนั้นหายาก (แต่ยังคงมีอยู่อย่างน้อยถึง 7 (ไม่แน่ใจเกี่ยวกับ 8 และ 10)) ดังนั้นจึงมีวิธีที่สอง ctrl + shift + คลิกขวาในส่วนที่ว่างของเมนูเริ่มและเลือก exit explorer ใน 8 ตัวเลือกออกเหมือนกัน แต่คุณใช้แถบงานไม่ใช่เมนูเริ่ม
Kevin Cathcart

1
1 งานนี้เป็นเสน่ห์บน Windows 7 FYI ผมเพียงแค่ใช้ CTRL + ALT + SHIFT และจากงาน Windows Task Manager ฉันฆ่ากระบวนการ explorer.exe ทั้งหมดและเริ่มต้นใหม่อีกครั้งโดยการกดปุ่มNew Taskปุ่ม
Marco Demaio

19

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


3
ปัญหานี้ส่งผลกระทบต่อบริการทั้งหมดแม้บริการที่เริ่มใหม่จะไม่เห็นตัวแปรสภาพแวดล้อมใหม่
gimel

1
คุณแน่ใจหรือว่าไม่ใช่เพราะการแบ่งปันกระบวนการ svchost?
Mark Sowul

16

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

บทความ KB เชื่อมโยงกับในคำตอบที่จริงกล่าวว่า:

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

ส่วนเกี่ยวกับตัวแปรสภาพแวดล้อมที่รีเซ็ตเป็นค่าก่อนหน้านี้หลังจากโหลดพรอมต์คำสั่งซ้ำสิ่งที่ฉันพบใน Windows Server 2008

บทความกล่าวต่อไปว่า:

หากต้องการให้การเปลี่ยนแปลงเหล่านี้เกิดขึ้นโดยไม่ต้องออกจากระบบให้ส่งข้อความ WM_SETTINGCHANGE ไปยังหน้าต่างทั้งหมดในระบบเพื่อให้แอปพลิเคชันที่สนใจ (เช่น Windows Explorer, โปรแกรมจัดการ, ตัวจัดการงาน, แผงควบคุมและอื่น ๆ ) สามารถทำการอัปเดตได้

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


1
นี่เป็นคำตอบเดียวที่เหมาะกับฉัน ไม่มีผู้อื่นรวมถึงการฆ่า Explorer ด้วยวิธีที่ยากลำบากหรือวิธีที่ "เหมาะสม" สร้างความแตกต่าง
Hashim

4

ทำให้ env ตัวแปรที่มีอยู่ทันที:

1. Open a shell

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

2. PATH=%PATH%;C:\type\your\new\path\here

ตรวจสอบว่าเส้นทางใหม่ของคุณได้รับการเพิ่มเข้ากับตัวแปรสภาพแวดล้อม

3. echo %PATH%

เสร็จสิ้น

ทำให้ตัวแปรพร้อมใช้งานเมื่อรีบูต

1. Press WinLogoKey+Pause/Break
2. On the left pane, press 'Advanced System Settings'
3. On the 'Advanced' tab, click 'Environment Variables'
4. In 'System Variables' choose the one you want to modify
5. Click Ok

ผ่านการทดสอบและใช้งานบน Windows 7/10


3

วิธีแก้ปัญหาที่เป็นไปได้สำหรับบริการคือการเรียกใช้ชั่วคราวในฐานะผู้ใช้รายอื่น (นอกเหนือจาก LocalSystem, LocalService, NetworkService) ตัวอย่างเช่นสำหรับบริการ Apache ทำงานได้โดยไม่มีปัญหาใด ๆ หากต้องการเปลี่ยนบัญชีบริการเปิดคอนโซล services.msc ให้เลือกบริการคลิกคุณสมบัติการบริการและบนแท็บที่สองป้อนข้อมูลรับรองการเข้าสู่ระบบสำหรับผู้ใช้ เริ่มบริการและตัวแปรสภาพแวดล้อมของบริการควรเป็นข้อมูลล่าสุด

หากนี่คือผู้ใช้ที่ได้รับการบันทึกไว้มากกว่านี้จะทำงานได้โดยไม่มีปัญหา หากคุณใช้บัญชีผู้ใช้ปัจจุบันการเริ่มระบบใหม่ explorer.exe อาจจำเป็นเช่นกัน นอกจากนี้โปรดทราบว่าการใช้บริการตามบัญชีผู้ใช้ปกติอาจสร้างความเสี่ยงด้านความปลอดภัย


1

เนื่องจากผู้คนยังไม่ได้เพิ่มคำตอบนี้ฉันอยากจะพูดถึงว่าคุณสามารถตั้งค่าตัวแปรระบบถาวรที่สามารถรีบูตได้ด้วยคำสั่ง SETX

เช่น

setx PATH "%PATH%;c:\temp\my\new\path"

โปรดทราบว่าข้างต้นจะไม่ทำงานในหน้าต่างคำสั่งปัจจุบันและคุณจะต้องเปิดหน้าต่างคำสั่งใหม่ก่อนที่มันจะมีผล เป็นผลให้ขึ้นอยู่กับกรณีการใช้งาน; คุณอาจต้องรวมสิ่งนี้กับหนึ่งในเทคนิคอื่น ๆ ข้างต้น

โปรดดู URL ต่อไปนี้สำหรับรายละเอียดเพิ่มเติม :


ไม่ทำงาน: / "ไวยากรณ์ไม่ถูกต้อง"
Joe DF

1
ลองตอนนี้. เห็นได้ชัดว่าจำเป็นต้องมีเครื่องหมายคำพูดคู่
Doug

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