मेरा विंडोज 8 कमांड लाइन अपना रास्ता क्यों नहीं अपडेट करेगा


21

मुझे अपने पैट वैरिएबल में एक नई प्रविष्टि जोड़ने की आवश्यकता थी। यह मेरी नौकरी में मेरे लिए एक सामान्य गतिविधि है, लेकिन मैंने हाल ही में विंडोज 8 का उपयोग करना शुरू कर दिया है। मैंने माना कि यह प्रक्रिया विंडोज 7, विस्टा, एक्सपी के समान होगी ...

यहाँ घटनाओं का मेरा क्रम है:

  1. ओपन सिस्टम गुण (प्रारंभ-> [प्रकार "नियंत्रण कक्ष"] -> नियंत्रण कक्ष \ प्रणाली और सुरक्षा \ प्रणाली -> उन्नत प्रणाली सेटिंग्स -> पर्यावरण चर)
  2. मेरे USER पथ चर की शुरुआत में नया पथ जोड़ें (C: \ dev \ Java \ Apache-ant-1.8.4; बिन;)
  3. कमांड प्रॉम्प्ट खोला (प्रारंभ -> [प्रकार "कमांड प्रॉम्प्ट" दर्ज करें] -> [टाइप "पथ" दर्ज करें]

मेरी नई पथ प्रविष्टि उपलब्ध नहीं है (संलग्न चित्र और वीडियो देखें)। मैंने विंडोज 7 मशीन पर ठीक उसी प्रक्रिया को डुप्लिकेट किया और यह काम किया।

पर्यावरण चर की स्क्रीन हड़पने

संपादित करें

विंडोज 8 पर्यावरण चर और कमांड प्रॉम्प्ट वीडियो

संपादित करें

यह निश्चित रूप से विंडोज 7 का व्यवहार नहीं है। इस वीडियो को देखने के लिए मैं विंडोज 7 में काम करने की अपेक्षा करता हूंhttp://youtu.be/95JXY5X0fII

EDIT 5/31/2013

इसलिए, बहुत हताशा के बाद, मैंने इस WM_SETTINGCHANGEघटना का परीक्षण करने के लिए एक छोटा सी # ऐप लिखा । यह कोड विंडोज 7 और विंडोज 8 दोनों में घटना को प्राप्त करता है। हालांकि, मेरे सिस्टम पर विंडोज 8 में, मुझे सही रास्ता नहीं मिलता है; लेकिन, मैं विंडोज 7 में करता हूं। इसे अन्य विंडोज 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

विंडोज 7 में चल रहे C # प्रोग्राम (आप देख सकते हैं कि यह घटना सामने आई है और यह सही रास्ता चुनता है)।

विंडोज 8 में चल रहे C # प्रोग्राम (आप देख सकते हैं कि यह घटना सामने आ सकती है, लेकिन गलत रास्ता है)।

मेरे पर्यावरण के बारे में कुछ ऐसा है जो इस समस्या का शिकार है। हालाँकि, क्या यह विंडोज 8 बग है?

EDIT 2014-04-28

इस और कई अन्य मुद्दों के कारण, हम अब डेस्कटॉप पर विंडोज 8 का उपयोग नहीं करते हैं। हमारे पास इस समस्या के साथ परीक्षण और प्रयोग जारी रखने का वातावरण नहीं है। अभी भी हमारे लिए इस समस्या का कोई जवाब या संकल्प नहीं है। नीचे दिए गए उत्तर हमारी समस्या का समाधान नहीं करते हैं।


2
मुझे लगता है कि उन्हें प्रभावी करने के लिए आपको बदलाव करने के बाद रिबूट करने की आवश्यकता है।
एनगमा

@ इनिग्मा क्यों? मुझे विंडोज 7, विस्टा, एक्सपी, 2000 में रीबूट करने की आवश्यकता नहीं थी ...
mawcsco 10'13

@mawcsco आपने कम से कम 7 में किया। प्रारंभ मेनू से ओपनिंग कमांड प्रॉम्प्ट एक्सप्लोरर शेल से पर्यावरण के साथ लॉन्च होता है, जिसे आपने लॉग इन करते समय लोड किया था। आपको एक्सप्लोरर को मारने / पुनः आरंभ करने, लॉग आउट करने या वापस करने या सिस्टम को पुनरारंभ करने की आवश्यकता है।
डारथ Android

1
@ इनिग्मा एक रिबूट आवश्यक नहीं होना चाहिए। serverfault.com/questions/8855/…
mawcsco

1
मैंने अभी इसे विंडोज 7 और विंडोज 8 दोनों पर चेक किया है: या तो cmdएक नया उदाहरण लॉन्च किए जाने के मामले में नया परिवेश चर दिखाई दे रहा था। बेशक पहले से चल रहे cmdअद्यतन वातावरण नहीं मिला।
एलेक्सी इवानोव

जवाबों:


7

यदि आप प्रारंभ मेनू से कमांड प्रॉम्प्ट शुरू कर रहे हैं या अपने कार्य पट्टी पर एक शॉर्टकट है, तो आपको चाहिए:

  • पुनः आरंभ करें explorer। इसे मार डालो और इसे relaunch करें।
  • लॉग आउट करें और वापस (जो प्रभावी रूप से स्थानांतरित हो जाए explorer)।
  • सिस्टम को पुनरारंभ करें (जो भी प्रभावी रूप से relaunches explorer)।

पर्यावरण तुरंत अद्यतन नहीं करता है क्योंकि पर्यावरण को उनकी मूल प्रक्रिया से विरासत में मिला है, अपवाद के साथ explorer, जो लॉगिन पर सिस्टम द्वारा शुरू किया गया है। यह है कि यह मेरे विंडोज 7 सिस्टम पर कैसे व्यवहार करता है।

इसलिए एनवायरनमेंट वेरिएबल्स को बदलना रजिस्ट्री कुंजियों को अपडेट करता है, लेकिन इन कुंजियों को तब तक दोबारा नहीं पढ़ा जाता है जब तक कि सिस्टम को लॉन्च होने वाली कुछ प्रक्रिया के लिए एक नया लॉगिन वातावरण नहीं बनाना है। ज्यादातर बार, ऐसा नहीं हो रहा है क्योंकि प्रक्रियाएं एक प्रक्रिया के बच्चे हैं जिनके पास पहले से ही एक वातावरण है, इसलिए पर्यावरण विरासत में मिला है।


2
विंडोज 7. के लिए बिल्कुल गलत है मैं ऊपर दिए गए वीडियो को अपने पोस्ट में देखें।
मवॉस्को

1
हुह। आप निश्चित रूप से वहां सही हैं, हालांकि मैंने निश्चित रूप से मेरे बदलावों को विन 7 से पहले नई कंसोल विंडो पर तुरंत लागू नहीं किया है। मुझे याद नहीं है कि मेरे सटीक वर्कफ़्लो क्या था, हालांकि। मैं अपने विन 8 सिस्टम के साथ खेलूंगा जब मैं घर पहुंचूंगा अगर किसी के पास आपके लिए कोई जवाब नहीं है।
डारथ एंड्रॉइड

5
यदि आपने सिस्टम गुण संवाद का उपयोग करके पर्यावरण चर को बदल दिया है, तो परिवर्तन वर्तमान में चल रहे एक्सप्लोरर उदाहरण पर तुरंत लागू होते हैं, और बाद में शुरू की गई सभी प्रक्रियाओं को नया वातावरण मिलता है। पहले से ही चल रही प्रक्रियाएं अपने पर्यावरण चर को स्वचालित रूप से अपडेट नहीं करती हैं जब तक कि वे WM_SETTINGCHANGEसंदेश को संभाल नहीं लेते हैं ।
एलेक्सी इवानोव

1
यार, इससे मुझे उस समस्या को समझने में मदद मिली जो मुझे वैसे भी हो रही थी। मैं कमांड प्रॉम्प्ट लॉन्च करने के लिए AutoHotkey का उपयोग करता हूं, और जब तक मैं ऑटोहोटेक को पुनरारंभ नहीं करता, तब तक यह काम नहीं कर रहा था!
मॉस

1
@mawcsco यह मेरे लिए काम करता है, मैं विंडोज 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);

विंडोज एक्सप्लोरर और प्रोग्राम मैनेजर सहित विंडोज 95 और विंडोज 98 के साथ आने वाले अनुप्रयोगों में से कोई भी इस संदेश का जवाब नहीं देता है। इस प्रकार, जबकि यह आलेख तकनीकी रूप से विंडोज 95 और विंडोज 98 पर लागू किया जा सकता है, तीसरे पक्ष के अनुप्रयोगों को सूचित करने के अलावा कोई प्रभाव नहीं है। Windows 95 पर वैश्विक पर्यावरण चर को बदलने का एकमात्र तरीका autoexec.bat फ़ाइल और रिबूट को संशोधित करना है।


2
विंडोज 7 में विंडोज एक्सप्लोरर इस संदेश को संभालता है, और यह टास्कबार या स्टार्ट मेनू से कमांड प्रॉम्प्ट को पुनरारंभ करने के लिए पर्याप्त है।
एलेक्सी इवानोव

"पर्यावरण चर में परिवर्तन तुरंत प्रभावी होना चाहिए, यदि आप प्रश्न में कंप्यूटर के लिए मुख्य गुण संवाद के माध्यम से परिवर्तन करते हैं (मेरे कंप्यूटर पर जाएँ। गुण | उन्नत | पर्यावरण चर)। सहेजे जाने के बाद, एक्सप्लोरर WM_SINGINGCHANGE संदेश प्रसारित करता है। सभी खिड़कियों को उन्हें परिवर्तन की सूचना देने के लिए। ” serverfault.com/questions/8855/…
mawcsco

2
"सिस्टम टिप यह आलेख आपके द्वारा उपयोग किए जा रहे विंडोज के एक अलग संस्करण पर लागू होता है। इस लेख की सामग्री आपके लिए प्रासंगिक नहीं हो सकती है। विंडोज 8 समाधान केंद्र पर जाएँ"
mawcsco

यह मुझे आश्चर्यचकित नहीं करेगा कि यह एक कार्यान्वयन विवरण है और Microsoft का विंडोज 8 या इसके ऊपर के इस व्यवहार का समर्थन करने का कोई इरादा नहीं था।
सर्फस

1

समस्या आपकी उपयोगकर्ता सेटिंग के साथ है। विंडो 8 में, प्रत्येक उपयोगकर्ता के पास स्वयं के पर्यावरण चर होते हैं।

ओपन सिस्टम गुण (प्रारंभ-> [प्रकार "नियंत्रण कक्ष"] -> नियंत्रण कक्ष \ प्रणाली और सुरक्षा \ प्रणाली -> उन्नत प्रणाली सेटिंग्स -> पर्यावरण चर)

उपरोक्त दृष्टिकोण रूट उपयोगकर्ता के लिए पर्यावरण चर को संपादित करेगा, शायद आपका वर्तमान उपयोगकर्ता नहीं।

आपको उपयोगकर्ता-खाते में जाना चाहिए -> अपना वर्तमान खाता चुनें -> पर्यावरण चर बदलें

बदलने के बाद, पावर शेल को पुनरारंभ करें। फिर

echo $env:JAVA_HOME

या

Get-ChildItem env

आशा है कि यह आपकी मदद करेगा।


मुझे लगता है कि आपने मेरे स्क्रीनशॉट और वीडियो में विस्तार से याद किया होगा जो "mwillia3 के लिए उपयोगकर्ता चर" के साथ संवाद दिखाता है। वह मेरा उपयोगकर्ता नाम है। मुझे पता है कि मैं सही पर्यावरण चर का संपादन कर रहा था। C # ऐप पुरानी कीमत के साथ, अपडेटेड वैल्यू के साथ इवेंट को फायर करता है। मैंने हार मान लिया। मुझे यकीन है कि यह एक विन 8 बग है और मुझे अब इसका परीक्षण करने के लिए विंडोज 8 तक पहुंच नहीं है।
mawcsco

कुछ लोग हमेशा विवरण नहीं पढ़ते हैं। मैं इसे कुछ प्रणालियों पर देखता हूं और दूसरों पर नहीं, मैंने इसे विंडोज 7/2008 पर भी देखा है। जब मुझे लगता है कि ऐसा होता है तो कोई तुक या तर्क नहीं है।
ferventcoder

WM_SETTINGSCHANGED के प्रचार के बाद भी Windows Server 2012 r2 के साथ एक ही समस्या। मेरा मानना ​​है कि यह एक विंडोज़ बग है।
वीजेनकोव

0

SET के बजाय SETX आज़माएं। उदाहरण के लिएSETX PATH "%PATH%;MyPath"


1
क्या आप बता सकते हैं कि कार्यों के SETXबजाय क्योंSET
क्रिसएफ

सबसे पहले, मैं कमांड लाइन का उपयोग नहीं कर रहा था, मैं सिस्टम संवाद का उपयोग कर रहा था। दूसरा, मेरे व्यवहार का पैटर्न विंडोज 7 में ठीक काम करता है, लेकिन कभी-कभी विंडोज 8 में नहीं। क्या आप दस्तावेज़ीकरण की ओर इशारा कर सकते हैं जो दिखाता है कि विंडोज 7 और विंडोज 8 के बीच SET और SETX कैसे बदल गए?
मवॉस्को

0

यदि आप विंडोज 8.1 का उपयोग कर रहे हैं, तो प्रशासक के रूप में कमांड प्रॉम्प्ट खोलें, फिर पाथ कमांड को कॉल करें और आपको यह देखना चाहिए कि यह वहां दिखाई दे। जब आप सामान्य सीएमडी पर वापस जाते हैं, तो यह भी दिखाई देगा। और तथ्य की बात के रूप में, आपको कमांड प्रॉम्प्ट से जोड़ा गया एप्लिकेशन शुरू करने में सक्षम होना चाहिए।



-1

यदि आप cmd.exe शुरू करने के लिए डेस्कटॉप से ​​Win + R का उपयोग करते हैं तो क्या यह काम करता है? मेरा अनुमान है कि इसे स्टार्ट स्क्रीन से शुरू करने से cmd.exe के माता-पिता के खोजकर्ता.exe (WSAHost.exe, IIRC या जो भी इसका नाम है) से अलग होने का कारण बनता है, और यह मूल प्रक्रिया WM_SETTINGCHANGE संदेशों के दौरान पर्यावरण को अपडेट नहीं करती है। मेरे पास परीक्षण के लिए हाथ पर एक विंडोज 8 मशीन नहीं है ...


यहां तक ​​कि विंडोज 8 में स्टार्ट स्क्रीन यूआई सभी को explorer.exe का हिस्सा लगता है क्योंकि यह तब गायब हो जाता है जब explorer.exe मारा जाता है।
बिंकी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.