เหตุใดบรรทัดคำสั่ง Windows 8 ของฉันจะไม่อัปเดตพา ธ


21

ฉันต้องการเพิ่มรายการใหม่ให้กับตัวแปร PATH ของฉัน นี่เป็นกิจกรรมทั่วไปสำหรับฉันในงานของฉัน แต่ฉันเพิ่งเริ่มใช้ Windows 8 ฉันคิดว่ากระบวนการนี้จะคล้ายกับ Windows 7, Vista, XP ...

นี่คือลำดับเหตุการณ์ของฉัน:

  1. เปิดคุณสมบัติของระบบ (เริ่ม -> [ประเภท "แผงควบคุม"] -> แผงควบคุม \ ระบบและ Security \ System -> การตั้งค่าระบบขั้นสูง -> ตัวแปรสภาพแวดล้อม)
  2. เพิ่มพา ธ ใหม่ไปยังจุดเริ่มต้นของตัวแปร USER PATH ของฉัน (C: \ dev \ Java \ apache-ant-1.8.4 \ bin;)
  3. เปิดพรอมต์คำสั่ง (Start -> [type "command prompt" enter] -> [type "path" enter]

รายการเส้นทางใหม่ของฉันไม่พร้อมใช้งาน (ดูรูปภาพและวิดีโอที่แนบมา) ฉันทำซ้ำกระบวนการเดียวกันที่แน่นอนบนเครื่อง Windows 7 และใช้งานได้

การจับภาพหน้าจอของตัวแปรสภาพแวดล้อม

แก้ไข

ตัวแปรสภาพแวดล้อม Windows 8 และวิดีโอพร้อมรับคำสั่ง

แก้ไข

นี่ไม่ใช่พฤติกรรมของ Windows 7 อย่างแน่นอนดูวิดีโอนี้เพื่อดูพฤติกรรมที่ฉันคาดว่าจะทำงานใน Windows 7 http://youtu.be/95JXY5X0fII

แก้ไข 5/31/2013

ดังนั้นหลังจากแห้วฉันเขียน C # แอพขนาดเล็กเพื่อทดสอบWM_SETTINGCHANGEเหตุการณ์ รหัสนี้ได้รับเหตุการณ์ในทั้ง Windows 7 และ Windows 8 อย่างไรก็ตามใน Windows 8 บนระบบของฉันฉันไม่ได้รับเส้นทางที่ถูกต้อง แต่ฉันทำใน Windows 7 ซึ่งไม่สามารถทำซ้ำในระบบ Windows 8 อื่น ๆ

นี่คือรหัส C #

using System;
using Microsoft.Win32;

public sealed class App
{
    static void Main()
    {
        SystemEvents.UserPreferenceChanging += new UserPreferenceChangingEventHandler(OnUserPreferenceChanging);

        Console.WriteLine("Waiting for system events.");
        Console.WriteLine("Press <Enter> to exit.");
        Console.ReadLine();
    }

    static void OnUserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e)
    {
        Console.WriteLine("The user preference is changing. Category={0}", e.Category);
        Console.WriteLine("path={0}", System.Environment.GetEnvironmentVariable("PATH"));
    }
}

OnUserPreferenceChanging เทียบเท่ากับ WM_SETTINGCHANGE

โปรแกรม C # ทำงานใน Windows 7 (คุณสามารถดูเหตุการณ์ที่เกิดขึ้นและเลือกเส้นทางที่ถูกต้อง)

โปรแกรม C # ทำงานใน Windows 8 (คุณสามารถเห็นเหตุการณ์ผ่านมา แต่เส้นทางผิด)

มีบางอย่างเกี่ยวกับสภาพแวดล้อมของฉันที่ทำให้เกิดปัญหานี้ อย่างไรก็ตามนี่เป็นข้อบกพร่องของ Windows 8 หรือไม่

แก้ไข 2014-04-28

เนื่องจากปัญหานี้และปัญหาอื่น ๆ อีกมากมายเราจึงไม่ใช้ Windows 8 บนเดสก์ท็อปอีกต่อไป เราไม่มีสภาพแวดล้อมในการทดสอบและทดสอบกับปัญหานี้ต่อไป ยังไม่มีคำตอบหรือการแก้ไขปัญหานี้สำหรับเรา คำตอบด้านล่างไม่สามารถแก้ปัญหาของเราได้


2
ฉันคิดว่าคุณต้องรีบูตหลังจากทำการเปลี่ยนแปลงเพื่อให้มีผล
ปริศนา

@Enigma ทำไม ฉันไม่จำเป็นต้องรีบูตใน Windows 7, Vista, XP, 2000 ...
mawcsco

@mawcsco คุณทำอย่างน้อย 7 ข้อ คำสั่งเปิดพร้อมท์จากเมนูเริ่มต้นจะเปิดขึ้นพร้อมกับสภาพแวดล้อมจากเชลล์เชลล์ซึ่งโหลดเมื่อคุณเข้าสู่ระบบคุณต้องฆ่า / รีสตาร์ท explorer ออกจากระบบหรือกลับเข้าสู่ระบบหรือรีสตาร์ทระบบ
Darth Android

1
@Enigma ไม่จำเป็นต้องรีบูตเครื่อง serverfault.com/questions/8855/…
mawcsco

1
ฉันเพิ่งตรวจสอบเรื่องนี้ทั้ง Windows 7 และ Windows 8: ไม่ว่าในกรณีใดตัวแปรสภาพแวดล้อมใหม่จะปรากฏให้เห็นcmdเมื่อมีการเปิดตัวอินสแตนซ์ใหม่ แน่นอนว่าการทำงานแล้วcmdไม่ได้รับการปรับปรุงสภาพแวดล้อม
Alexey Ivanov

คำตอบ:


7

หากคุณกำลังเปิดใช้พรอมต์คำสั่งจากเมนูเริ่มต้นหรือทางลัดบนแถบงานของคุณคุณต้อง:

  • explorerเริ่มต้นใหม่ ฆ่ามันและเปิดใหม่อีกครั้ง
  • ออกจากระบบและกลับเข้ามาใหม่ (ซึ่งเปิดใช้ใหม่อย่างมีประสิทธิภาพexplorer)
  • รีสตาร์ทระบบ (ซึ่งเปิดใช้ใหม่อย่างมีประสิทธิภาพexplorerเช่นกัน)

สภาพแวดล้อมไม่ได้อัพเดตทันทีเนื่องจากสภาพแวดล้อมได้รับการสืบทอดจากกระบวนการพาเรนต์ยกเว้นexplorerมีการเริ่มต้นโดยระบบเมื่อเข้าสู่ระบบ นี่คือลักษณะการทำงานบนระบบ Windows 7 ของฉัน

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


2
เท็จอย่างแน่นอนสำหรับ Windows 7 ดูวิดีโอที่ฉันลิงค์ในโพสต์ของฉันด้านบน
mawcsco

1
ฮะ. คุณถูกต้องแน่นอนแม้ว่าฉันจะมีการเปลี่ยนแปลงของฉันไม่ได้นำไปใช้กับหน้าต่างคอนโซลใหม่ใน Win 7 มาก่อน ฉันจำไม่ได้ว่าเวิร์กโฟลว์ที่แท้จริงของฉันคืออะไร ฉันจะเล่นกับระบบ Win 8 ของฉันเมื่อฉันกลับถึงบ้านถ้าไม่มีใครตอบคุณ
Darth Android

5
หากคุณเปลี่ยนตัวแปรสภาพแวดล้อมโดยใช้กล่องโต้ตอบคุณสมบัติของระบบการเปลี่ยนแปลงจะถูกนำไปใช้ทันทีกับอินสแตนซ์ของ Explorer ที่ใช้งานอยู่ในปัจจุบันและกระบวนการทั้งหมดที่เริ่มต้นหลังจากนั้นจะได้รับสภาพแวดล้อมใหม่ กระบวนการที่รันอยู่แล้วจะไม่อัพเดตตัวแปรสภาพแวดล้อมโดยอัตโนมัติเว้นแต่พวกเขาจัดการกับWM_SETTINGCHANGEข้อความ
Alexey Ivanov

1
เพื่อนนี่ช่วยฉันเข้าใจปัญหาที่ฉันมีอยู่แล้ว ฉันใช้ AutoHotkey เพื่อเปิดใช้งานพรอมต์คำสั่งและมันไม่ทำงานจนกว่าฉันจะรีสตาร์ท autohotkey!
มอสส์

1
@mawcsco มันใช้งานได้สำหรับฉันฉันใช้ Windows 7
laike9m

3

จาก: http://support.microsoft.com/kb/104011ผ่าน/server//q/8855/158027

...

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

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


ตัวอย่างเช่นบนระบบที่ใช้ Windows NT ชิ้นส่วนของรหัสต่อไปนี้ควรเผยแพร่การเปลี่ยนแปลงของตัวแปรสภาพแวดล้อมที่ใช้ในพรอมต์คำสั่ง:

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
    (LPARAM) "Environment", SMTO_ABORTIFHUNG,
    5000, &dwReturnValue);

ไม่มีแอปพลิเคชันใดที่มาพร้อมกับ Windows 95 และ Windows 98 รวมถึง Windows Explorer และ Program Manager ตอบกลับข้อความนี้ ดังนั้นในขณะที่บทความนี้สามารถนำไปใช้ในทางเทคนิคใน Windows 95 และ Windows 98 ได้ไม่มีผลกระทบใด ๆ ยกเว้นการแจ้งเตือนแอปพลิเคชันของบุคคลที่สาม วิธีเดียวในการเปลี่ยนตัวแปรสภาพแวดล้อมโกลบอลบน Windows 95 คือการแก้ไขไฟล์ autoexec.bat และรีบูต


2
Windows Explorer ใน Windows 7 จัดการข้อความนี้และก็เพียงพอที่จะรีสตาร์ทพร้อมท์คำสั่งจากแถบงานหรือเมนูเริ่ม
Alexey Ivanov

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

2
"คำแนะนำระบบบทความนี้ใช้กับ Windows รุ่นอื่นที่ไม่ใช่รุ่นที่คุณใช้เนื้อหาในบทความนี้อาจไม่เกี่ยวข้องกับคุณเยี่ยมชมศูนย์โซลูชัน Windows 8"
mawcsco

ฉันไม่แปลกใจเลยว่านี่เป็นรายละเอียดการติดตั้งและ Microsoft ไม่มีความตั้งใจที่จะสนับสนุนพฤติกรรมนี้ใน Windows 8 หรือสูงกว่า
surfasb

1

ปัญหาเกิดจากการตั้งค่าผู้ใช้ของคุณ ใน Window 8 ผู้ใช้แต่ละคนมีตัวแปรสภาพแวดล้อมเป็นของตนเอง

เปิดคุณสมบัติของระบบ (เริ่ม -> [ประเภท "แผงควบคุม"] -> แผงควบคุม \ ระบบและ Security \ System -> การตั้งค่าระบบขั้นสูง -> ตัวแปรสภาพแวดล้อม)

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

คุณควรไปที่บัญชีผู้ใช้ -> เลือกบัญชีปัจจุบันของคุณ -> เปลี่ยนตัวแปรสภาพแวดล้อม

หลังจากเปลี่ยนแล้วให้รีสตาร์ทเชลล์เพาเวอร์ แล้วก็

echo $env:JAVA_HOME

หรือ

Get-ChildItem env

หวังว่านี่จะช่วยคุณได้


ฉันคิดว่าคุณอาจพลาดรายละเอียดในภาพหน้าจอและวิดีโอของฉันที่แสดงข้อความโต้ตอบกับ "ตัวแปรผู้ใช้สำหรับ mwillia3" นั่นคือชื่อผู้ใช้ของฉัน ฉันรู้แน่นอนว่าฉันแก้ไขตัวแปรสภาพแวดล้อมที่ถูกต้อง แอป C # เริ่มการทำงานของเหตุการณ์ด้วยค่าเก่าไม่ใช่ค่าที่อัปเดต ฉันยอมแพ้. ฉันค่อนข้างแน่ใจว่านี่เป็นข้อผิดพลาด Win 8 และฉันไม่สามารถเข้าถึง Windows 8 เพื่อทดสอบสิ่งนี้ได้อีกต่อไป
mawcsco

บางคนไม่ได้อ่านรายละเอียดเสมอไป ฉันเห็นสิ่งนี้ในบางระบบและไม่ใช่ระบบอื่นฉันเคยเห็นมันใน Windows 7/2008 ไม่มีการสัมผัสหรือเหตุผลเมื่อมันเกิดขึ้นที่ฉันได้พบ
ferventcoder

ปัญหาเดียวกันกับ Windows Server 2012 r2 แม้หลังจากเผยแพร่ WM_SETTINGSCHANGED แล้ว ฉันเชื่อว่าเป็นข้อผิดพลาด windows
vezenkov

0

ลองใช้ SETX แทน SET เช่นSETX PATH "%PATH%;MyPath"


1
คุณสามารถอธิบายเหตุผลที่ SETXมากกว่าSETงาน
ChrisF

ก่อนอื่นฉันไม่ได้ใช้บรรทัดคำสั่งฉันใช้กล่องโต้ตอบระบบ ประการที่สองรูปแบบพฤติกรรมของฉันใช้งานได้ดีใน Windows 7 แต่บางครั้งไม่ได้อยู่ใน Windows 8 คุณสามารถชี้ไปที่เอกสารที่แสดงว่า SET และ SETX เปลี่ยนแปลงระหว่าง Windows 7 และ Windows 8 ได้อย่างไร
mawcsco

0

หากคุณใช้ Windows 8.1 ให้เปิดพรอมต์คำสั่งในฐานะผู้ดูแลระบบจากนั้นเรียกคำสั่ง PATH และคุณจะเห็นว่ามีคำสั่งปรากฏขึ้นมาที่นั่น เมื่อคุณกลับไปที่ cmd ปกติมันก็จะปรากฏขึ้น และตามความเป็นจริงคุณควรจะสามารถเริ่มแอปพลิเคชันที่เพิ่มเข้ามาจากพรอมต์คำสั่ง



-1

ใช้งานได้ไหมถ้าคุณใช้ Win + R จากเดสก์ท็อปเพื่อเริ่มต้น cmd.exe ฉันเดาว่าการเริ่มต้นจากหน้าจอเริ่มต้นทำให้ผู้ปกครองของ cmd.exe เริ่มต้นนั้นแตกต่างจาก explorer.exe (WSAHost.exe, IIRC หรือชื่ออื่น ๆ ) และกระบวนการหลักนั้นไม่ได้ปรับปรุงสภาพแวดล้อมในระหว่างข้อความ WM_SETTINGCHANGE ฉันไม่มีเครื่อง Windows 8 ที่จะทำการทดสอบ ...


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