उपयोगकर्ता बनाम सिस्टम पर्यावरण चर: क्या सिस्टम चर उपयोगकर्ता चर को ओवरराइड करते हैं?


20

मैंने अपने लैपटॉप पर अधिकार बढ़ाए हैं, लेकिन अधिकार नहीं। सिस्टम परिवेश चर को संशोधित करने के लिए व्यवस्थापक अधिकारों की आवश्यकता होती है। मुझे उम्मीद थी कि अगर मैंने एक सिस्टम एनवायरनमेंट वैरिएबल के समान नाम के साथ एक यूजर एनवायरनमेंट वैरिएबल बनाया, तो यूजर वैरिएबल सिस्टम वैरिएबल को ओवरराइड कर देगा लेकिन ऐसा नहीं होता है।

सिस्टम चर के समान नाम के उपयोगकर्ता चर को जोड़ने के बाद, मैंने एक बिल्कुल नई cmd विंडो खोली और चर को प्रदर्शित करने के लिए इको कमांड का उपयोग किया । इसने मुझे उपयोगकर्ता चर के मूल्य के बजाय सिस्टम चर का मान दिखाया।

मैं सिर्फ इस बात की पुष्टि करना चाहता था कि यह अपेक्षित व्यवहार है और इसके पीछे के तर्क को समझें। मैं सिस्टम को ओवरराइड करने के लिए अधिक विशिष्ट उपयोगकर्ता सेटिंग की अपेक्षा करूंगा।

मेरे पास विंडोज 7 है।


जब आप चर बदलते हैं तो आपको अक्सर विंडोज को पूरी तरह से पुनरारंभ करना पड़ता है। सेटिंग में एक वैरिएबल बदलने से रनिंग प्रॉसेस नहीं बदलेगी। नई प्रक्रियाएं चल रही प्रक्रियाओं से पर्यावरण को कॉपी करती हैं (वे कैसे शुरू किए गए हैं इसके आधार पर), इसलिए बस एक प्रक्रिया शुरू करने का मतलब यह नहीं है कि आपको एक नया वातावरण मिलेगा।
Zoredache

मैंने रिबूट किया और अभी भी जब मैं cmd.exe विंडो से "इको% पाथ%" चलाता हूं, तो यह मेरे सिस्टम एनवी वेरिएबल को प्रदर्शित करता है, न कि यूजर वैरिएबल का। तो, मैंने यूजर वेरिएबल को डिलीट कर दिया, ओ एडमिन एक्सेस, मेरे सिस्टम पाथ वेरिएबल को बदल दिया और ऐसा ही इको सीएमडी किया। अद्यतन किए गए env मान w / o रिबूटिंग प्रदर्शित किया गया था। यह मुझे बताता है कि USER var सिस्टम सिस्टम को ओवरराइड नहीं करते हैं और रिबूट आवश्यक नहीं है। नीतेहर वही है जिसकी मुझे उम्मीद थी।
चाड

सिस्टम चर के समान नाम के उपयोगकर्ता चर को जोड़ने के लिए किस प्रक्रिया का उपयोग किया जाता है ? कुछ पसंद है ?
जोसेफज

जोसेफज: हां, मैंने दो पर्यावरण चर, एक USER द अदर सिस्टम, दोनों को एक ही नाम के साथ जोड़ा, तेह विंडोज 7 जीयूआई का उपयोग करके इनर लिंक दिखाए गए स्क्रीन के समान है।
चाड

@ क्या वह उत्तर नहीं है जिसे आपने अपने अनुभव के ठीक विपरीत स्वीकार किया है? आप विसंगति की व्याख्या कैसे करते हैं?
रॉकपॉपरलॉजिस्ट

जवाबों:


24

Windows NT में MSKB लेख पर्यावरण चर के अनुसार :

उपयोगकर्ता पर्यावरण चर .... सिस्टम पर्यावरण चर पर पूर्वता लेते हैं।

एक उल्लेखनीय अपवाद वह PATHचर है जो सिस्टम और उपयोगकर्ता चर का संयुक्त परिणाम है:

पथ का निर्माण सिस्टम पथ से किया जाता है, जिसे सिस्टम डायलॉग बॉक्स में सिस्टम एन्वायरमेंट वेरिएबल्स फ़ील्ड में देखा जा सकता है। उपयोगकर्ता पथ को सिस्टम पथ में जोड़ा जाता है।

लेख के विस्तार LibPathऔर Os2LibPathचर के साथ-साथ उन लोगों को भी कैसे autoexec.batनियंत्रित किया जाता है, के समान अपवादों की चर्चा की गई है । इन बिंदुओं को आज के विशिष्ट वातावरण में थोड़ी प्रासंगिकता मिलने की संभावना है।

इस SO उत्तर का श्रेय


1
क्या उपयोगकर्ता पथ को सिस्टम पथ से पहले बनाना संभव है?
क्वर्टी

2

ट्विस्टी इम्पेरसेंटर ने अपने उत्तर में जो कुछ कहा है वह सब सही है। उपयोगकर्ता पथ चर जोड़ा जाता है कि विचार पर प्रकाश डाला गया है, और मेरा मानना ​​है कि उस अंतर के परिणामों को कुछ अतिरिक्त उपचार की आवश्यकता होती है।

पथ =% पथ% (सिस्टम); % पथ% (उपयोगकर्ता)

जब आप एक निष्पादन योग्य प्रोग्राम (या किसी भी निष्पादन योग्य स्क्रिप्ट, के रूप में इस तरह के अमल .bat, .vbsआदि) आप पूरी तरह से योग्य पथ प्रदान करने की आवश्यकता नहीं है।

उदाहरण के लिए, चलाने के लिए java, आप इनमें से किसी में भी टाइप कर सकते हैं:

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

java.exe -version

java -version

पहला उदाहरण पूरी तरह से योग्य पथ का उपयोग करता है। यह हमेशा जावा के संस्करण का उपयोग करेगा उस सटीक पथ पर।

दूसरा उदाहरण %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

इस सब का क्या मतलब है?

में विपरीत अन्य वातावरण चर को, उपयोगकर्ता पथ आप सिस्टम पथ ओवरराइड करने के लिए अनुमति नहीं है। ठीक इसके विपरीत मामला है। ऊपर दिए गए उदाहरणों से, कई मामले हैं जहां आप जावा के डिफ़ॉल्ट संस्करण को बदल सकते हैं। हालाँकि, यदि सिस्टम पथ में पहले से ही जावा संस्करण सूचीबद्ध है, तो वह संस्करण है जो हमेशा पहले पाया जाएगा, क्योंकि पथ क्रम में खोजा जाता है, बाएं से दाएं और उपयोगकर्ता पथ दाईं ओर जोड़ा जाता है -हैंड साइड, बाईं ओर सिस्टम पथ के साथ।

मैं इसमें क्या कर सकता हूँ?

यदि आपके पास सिस्टम वातावरण चर की पहुंच नहीं है, तो आप उपयोगकर्ता पथ का उपयोग करके सिस्टम पथ पर डिफ़ॉल्ट प्रोग्राम को ओवरराइड नहीं कर सकते। (वास्तव में, यह इस तरह से होना चाहिए, या कुछ प्रोग्राम सही तरीके से काम करना बंद कर देंगे, और यह आपके सिस्टम को दुर्भावनापूर्ण सॉफ़्टवेयर से छेड़छाड़ करने के लिए खोल देगा। कोई भी ऐसा नहीं चाहता है।)

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


1
क्या उपयोगकर्ता पथ को सिस्टम पथ से पहले बनाना संभव है?
क्वर्टी

1
यह एक अलग प्रश्न के लिए एक अच्छा विषय होगा। (इस साइट पर एक त्वरित खोज ने तत्काल प्रासंगिक कुछ भी प्रकट नहीं किया।) कृपया एक नया प्रश्न पूछने के लिए स्वतंत्र महसूस करें, और टिप्पणियों में यहां एक लिंक पोस्ट करें!
JonathanDavidArndt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.