2009-02-10 29 views
16

वैश्विक विंडोज़ पथ पर्यावरण परिवर्तनीय प्रोग्रामेटिक (सी ++) सेट करने का कोई तरीका है?

जहाँ तक मैं देख सकता हूं, putenv इसे केवल वर्तमान एप्लिकेशन के लिए सेट करता है।
भी एक विकल्प देखते हैं अगर मैं एपीआई तरीकों पसंद करेंगे रजिस्ट्री (HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment) में सीधे बदल रहा है?क्या विंडोज़ पर सी ++ में प्रोग्रामेटिक रूप से पर्यावरण पथ सेट करने का कोई तरीका है?

उत्तर

23

MSDN Says:

SetEnvironmentVariable कॉलिंग सिस्टम वातावरण चर पर कोई प्रभाव पड़ता है। प्रोग्राम के रूप में जोड़ने के लिए या प्रणाली वातावरण चर को संशोधित, HKEY_LOCAL_MACHINE \ प्रणाली के लिए उन्हें जोड़ने के लिए \ CurrentControlSet \ Control \ सत्र प्रबंधक \ पर्यावरण रजिस्ट्री कुंजी है, तो lParam के साथ स्ट्रिंग "पर्यावरण" करने के लिए सेट एक WM_SETTINGCHANGE संदेश प्रसारित । यह अनुप्रयोगों की अनुमति देता है, जैसे खोल, अपने अपडेट उठाएं। ध्यान दें कि वातावरण चर की मूल्यों इस कुंजी में सूचीबद्ध 1024 वर्ण हो सकते हैं।

+1

यह ध्यान दिया जाना चाहिए कि "पर्यावरण" स्ट्रिंग यूटीएफ 16 फॉर्म में है, इसलिए आपको 'एल' उपसर्ग का उपयोग करना चाहिए। नमूना कोड: 'SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) एल "पर्यावरण", SMTO_ABORTIFHUNG, 5000, NULL); ' – izogfif

3

कोई एपीआई नहीं है - रजिस्ट्री बदल रहा है जिस तरह से यह करने के लिए है। बदले गए मूल्य का उपयोग परिवर्तन के बाद शुरू होने वाली प्रक्रियाओं के लिए किया जाएगा।

इसके अलावा: ध्यान दें कि चल अनुप्रयोगों को सक्रिय रूप से सेटिंग बदल गई संदेश और कई (सबसे?) ऐसा नहीं करते संसाधित करना होगा।

2

आप रजिस्ट्री के माध्यम से यह करने के लिए चाहते हैं, आप this कार्यक्रम के स्रोत कोड को देखने के लिए चाहते हो सकता है।

माइक्रोसॉफ्ट भी एक छोटे से कमांड लाइन उपयोगिता अपने resource toolkits साथ setx कहा जाता है, जो आप से करने देंगे प्रदान करता है। वैसे, नियमित सेट कमांड आपको बस स्थानीय पर्यावरण चर को परिभाषित करने देता है।

2

हाँ आप सही हैं। तुम भी बंद प्रवेश करने कुछ मिलीसेकंड (5000) SendMessageTimeout एपीआई का उपयोग कर के लिए पैरामीटर (lParam) "पर्यावरण" SMTO_ABORTIFHUNG साथ के लिए सभी खिड़कियां SETTINGCHANGE कास्टिंग borad की

संदेश संदेश के बिना इन सेटिंग्स को प्रभावित करने की जरूरत है।

यह वही है के साथ संसाधन किट करता है प्रदान की setX.exe है।

9

जैसा कि पहले बताया गया, मशीन स्तर पर पथ को बदलने के लिए सिर्फ इस रजिस्ट्री प्रविष्टि को बदलें:

HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 

लेकिन क्या आप भी इस रजिस्ट्री को बदलकर उपयोगकर्ता स्तर पर पथ सेट कर सकते हैं प्रविष्टि:

HKEY_CURRENT_USER\Environment\Path 

और तुम भी आवेदन \ पथ deta जोड़कर आवेदन स्तर पर पथ सेट कर सकते हैं इस रजिस्ट्री प्रविष्टि के लिए ils:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ 
संबंधित मुद्दे

 संबंधित मुद्दे