1024 वर्ण सीमा के लिए तकनीकी कारण क्या है
आपके द्वारा संदर्भित सीमा 1024 बाइट्स नहीं है। जैसा कि लेख में बताया गया है कि एक बग था, जिसमें एक हॉटफ़िक्स उपलब्ध था।
लेख स्पष्ट रूप से कहता है कि CreateEnvironmentBlock
फ़ंक्शन के लिए सीमा 2048 बाइट्स है ।
इसके अलावा बग विंडोज (XP और सर्वर 2003) के दो पुराने संस्करणों के लिए विशिष्ट था।
जब कोई अनुप्रयोग Microsoft Windows Server 2003-आधारित या Microsoft Windows XP- आधारित कंप्यूटर पर वातावरण चर को पुनः प्राप्त करने के लिए CreateEnvironmentBlock फ़ंक्शन को कॉल करता है, तो लौटाया गया पथ पर्यावरण चर 1,024 बाइट्स पर छोटा हो जाता है। यह व्यवहार तब भी होता है जब एक पर्यावरण चर का अधिकतम आकार 2,048 बाइट्स होता है। यह समस्या एप्लिकेशन को सही वातावरण चर प्राप्त करने से रोकती है।
स्रोत किसी Windows Server 2003-आधारित या Windows XP- आधारित कंप्यूटर पर 1,024 बाइट्स के लिए एक लौटाया गया पथ परिवेश चर काट दिया जाता है
तो क्या सीमा 2048 वर्ण है?
वास्तविक सीमा 32,760 अक्षर है। हालाँकि, आपको उस सैद्धांतिक अधिकतम अभ्यास की प्राप्ति की संभावना नहीं है।
एक बैच फ़ाइल को अधिकतम कमांड लाइन की लंबाई से विवश किया जाता है क्योंकि पर्यावरण चर को बैच प्रोसेसर की कमांड लाइन बफर में फिट होने की आवश्यकता होती है।
Microsoft Windows XP या बाद में चलने वाले कंप्यूटरों पर, कमांड प्रॉम्प्ट पर उपयोग किए जा सकने वाले स्ट्रिंग की अधिकतम लंबाई 8191 वर्ण है।
कमांड प्रॉम्प्ट किसी भी पर्यावरण चर को अनदेखा करता है जो मूल प्रक्रिया से विरासत में मिला है और 8191 वर्णों की अपनी सीमाओं से अधिक लंबा है।
पर्यावरण रजिस्ट्री कुंजी सेट करना उस कोड में 2048 वर्ण सीमा है जो रजिस्ट्री कुंजी को पार्स करता है और इसमें से एक पर्यावरण ब्लॉक बनाता है।
नीचे दिए गए सूत्र
PATH
सामान्य उपयोग के माध्यम से वह मूल्य ( ) कैसे भ्रष्ट हो जाएगा?
जैसा कि बाद में समझाया गया है, यह तब हो सकता है जब सिस्टम PATH
को 1920 वर्णों से अधिक समय तक संशोधित किया जाए।
ऐसा क्यों हो रहा है, इस पर सटीक निदान के लिए आपने अपने प्रश्न में पर्याप्त जानकारी नहीं दी है।
मेरे पास एक बड़ा उपयोगकर्ता PATH
चर सेट है
PATH
पर्यावरण चर पर एक विशिष्ट सीमा होती है ।
उपयोगकर्ता PATH
चर को सिस्टम PATH
चर के साथ सफलतापूर्वक विलय करने के लिए सिस्टम चर PATH
<1920 वर्ण होना चाहिए।
पता चला कि विंडोज सर्वर 2003 पर, एक बार सिस्टम PATH 1920 वर्णों को पारित कर देता है, PATH
तो प्रक्रिया PATH
परिवेश चर सेट करने के लिए उपयोगकर्ता पर्यावरण चर अब इसके साथ विलय नहीं किया जाता है , भले ही पूर्ण प्रणाली PATH
(भले ही बड़ी) प्रक्रिया PATH
चर में शामिल हो जाएगी ।
स्रोत क्या गूंज% PATH% केवल सिस्टम या उपयोगकर्ता चर का भी विस्तार करता है? डेविड हेफर्नन द्वारा उत्तर
किसी फ़ाइल पथ पर सीमाएँ क्या हैं?
अधिकतम पथ लंबाई सीमा
विंडोज एपीआई में (निम्नलिखित पैराग्राफ में चर्चा किए गए कुछ अपवादों के साथ), एक पथ की अधिकतम लंबाई MAX_PATH है, जिसे 260 वर्णों के रूप में परिभाषित किया गया है।
एक स्थानीय पथ को निम्न क्रम में संरचित किया गया है: ड्राइव लेटर, कोलन, बैकस्लैश, बैकस्लैश द्वारा अलग किए गए नाम घटक और एक समाप्ति नल वर्ण।
उदाहरण के लिए, ड्राइव D पर अधिकतम पथ वह है D:\some 256-character path string<NUL>
जहां <NUL>
वर्तमान सिस्टम कोडपेज के लिए अदृश्य समाप्ति अशक्त चरित्र का प्रतिनिधित्व करता है। (अक्षर <
और >
यहाँ दृश्य स्पष्टता के लिए उपयोग किया जाता है और एक मान्य पथ स्ट्रिंग का हिस्सा नहीं हो सकता है।)
नोट: Windows I में फ़ाइल I / O फ़ंक्शन "/" को \ n "" \ n "" उपसर्ग के रूप में निम्न अनुभागों में विस्तृत रूप में उपयोग करते हुए छोड़कर, नाम को NT-शैली नाम में परिवर्तित करने के भाग के रूप में परिवर्तित करते हैं।
विंडोज एपीआई में कई कार्य हैं जिनमें 32,767 वर्णों की अधिकतम पथ लंबाई के लिए विस्तारित-लंबाई पथ की अनुमति देने के लिए यूनिकोड संस्करण भी हैं।
- इस प्रकार का पथ बैकस्लैश द्वारा अलग किए गए घटकों से बना है, प्रत्येक
फ़ंक्शन के
lpMaximumComponentLength
पैरामीटर में दिए गए GetVolumeInformation
मान तक (यह मान आमतौर पर 255 वर्ण है)। एक विस्तारित-लंबाई पथ निर्दिष्ट करने के लिए, "\?" उपसर्ग का उपयोग करें। उदाहरण के लिए, "\! \ D: \ बहुत लंबा रास्ता"।
नोट: 32,767 वर्णों का अधिकतम पथ अनुमानित है, क्योंकि "\ _" उपसर्ग को रन टाइम पर सिस्टम द्वारा लंबे स्ट्रिंग तक विस्तारित किया जा सकता है, और यह विस्तार कुल लंबाई पर लागू होता है।
स्रोत नामकरण फ़ाइलें, पथ और नाम स्थान
एक पर्यावरण चर की अधिकतम लंबाई क्या है?
एक पर्यावरण चर की सैद्धांतिक अधिकतम लंबाई लगभग 32,760 अक्षर है। हालाँकि, आपको उस सैद्धांतिक अधिकतम अभ्यास की प्राप्ति की संभावना नहीं है।
सभी पर्यावरण चर को एक एकल पर्यावरण ब्लॉक में एक साथ रहना चाहिए, जिसमें स्वयं की सीमा 32767 वर्ण है।
लेकिन यह गिनती सभी पर्यावरण चर नामों और मूल्यों पर योग है, इसलिए आप अनुमान लगा सकते हैं, उस सैद्धांतिक अधिकतम लंबाई को मारा है यदि आपने सभी पर्यावरण चर हटा दिए हैं और फिर एक्स नामक एक चर को वास्तव में विशाल 32,760-वर्ण मान के साथ सेट किया है।
व्यवहार में, निश्चित रूप से, आपको ब्लॉक में अन्य सभी चर के साथ पर्यावरण ब्लॉक को साझा करना होगा, इसलिए SetEnvironmentVariable
32,760-वर्ण स्ट्रिंग के साथ आपकी यादृच्छिक कॉल
सफल होने की संभावना नहीं है।
लेकिन यह आपकी केवल व्यावहारिक सीमा नहीं है।
यह इस बात पर भी निर्भर करता है कि आप चर को कैसे सेट कर रहे हैं; यानी, कोड जो आपके पर्यावरण-चर-सेटिंग तकनीक से गुजरता है इससे पहले कि वह SetEnvironmentVariable
कॉल पर पहुंच जाए।
यदि आप बैच फ़ाइल का उपयोग कर रहे हैं, तो आप अधिकतम कमांड लाइन की लंबाई से विवश हैं क्योंकि पर्यावरण चर को बैच प्रोसेसर की कमांड लाइन बफर में फिट होने की आवश्यकता है।
दूसरी ओर, शायद आप पर्यावरण रजिस्ट्री कुंजी सेट कर रहे हैं, जिस स्थिति में आप उस कोड में 2048-वर्ण सीमा में चलते हैं जो रजिस्ट्री कुंजी को पार्स करता है और इसमें से एक पर्यावरण ब्लॉक बनाता है।
अंतःक्रियात्मक रूप से वातावरण चर सेट करने के लिए संवाद बॉक्स में एक सीमा भी है, जिसका संख्यात्मक मान मेरे सिर के ऊपर से पता करने के लिए नहीं होता है।
स्रोत पर्यावरण चर की अधिकतम लंबाई क्या है? रेमंड चेन (एक Microsoft कर्मचारी) द्वारा।
कमांड प्रॉम्प्ट ( Cmd.exe
) कमांड-लाइन स्ट्रिंग लिमिटेशन
Microsoft Windows XP या बाद में चलने वाले कंप्यूटरों पर, कमांड प्रॉम्प्ट पर उपयोग किए जा सकने वाले स्ट्रिंग की अधिकतम लंबाई 8191 वर्ण है। Microsoft Windows 2000 या Windows NT 4.0 चलाने वाले कंप्यूटरों पर, कमांड प्रॉम्प्ट पर आपके द्वारा उपयोग किए जा सकने वाले स्ट्रिंग की अधिकतम लंबाई 2047 वर्ण है।
यह सीमा कमांड लाइन, व्यक्तिगत पर्यावरण चर (जैसे PATH चर) पर लागू होती है जो अन्य प्रक्रियाओं, और सभी पर्यावरण चर विस्तार से विरासत में मिली हैं। यदि आप बैच फ़ाइलों को चलाने के लिए कमांड प्रॉम्प्ट का उपयोग करते हैं, तो यह सीमा बैच फ़ाइल प्रसंस्करण पर भी लागू होती है।
उदाहरण
निम्न सूची आपको कुछ उदाहरण देती है कि यह सीमा कमांड प्रॉम्प्ट में चलने वाली कमांड पर कैसे लागू होती है और कमांड जो आप एक बैच फ़ाइल में उपयोग करते हैं।
कमांड प्रॉम्प्ट में, कमांड प्रॉम्प्ट पर आपके द्वारा उपयोग की जाने वाली निम्न कमांड लाइन की कुल लंबाई 2047 या 8191 अक्षर (आपके ऑपरेटिंग सिस्टम के लिए उपयुक्त) से अधिक नहीं हो सकती है:
cmd.exe /k ExecutableFile.exe parameter1, parameter2 ... parameterN
बैच फ़ाइल में, निम्न कमांड लाइन की कुल लंबाई जो आप बैच फ़ाइल में उपयोग करते हैं, उसमें 2047 या 8191 अक्षर (आपके ऑपरेटिंग सिस्टम के लिए उपयुक्त) से अधिक नहीं हो सकते हैं:
cmd.exe /k ExecutableFile.exe parameter1, parameter2 ... parameterN
जब आप बैच फ़ाइल को चलाने के लिए कमांड प्रॉम्प्ट का उपयोग करते हैं तो यह सीमा कमांड लाइनों पर लागू होती है जो बैच फ़ाइलों में समाहित होती है।
कमांड प्रॉम्प्ट में, एन्वायरमेंटल वेरिएबल 1 और एनवायरमेंटल वेरिएबल 3 का विस्तार करने के बाद एन्वायरमेंटल वेरिएबल 1 की कुल लंबाई 2047 या 8191 कैरेक्टर (आपके ऑपरेटिंग सिस्टम के लिए उपयुक्त) से अधिक नहीं हो सकती है:
c:> set EnvironmentVariable1=EnvironmentVariable2EnvironmentVariable3
एक बैच फ़ाइल में, कमांड लाइन में पर्यावरण चर का विस्तार करने के बाद निम्न कमांड लाइन की कुल लंबाई 2047 या 8191 अक्षर (आपके ऑपरेटिंग सिस्टम के लिए उपयुक्त) से अधिक नहीं हो सकती है:
ExecutableFile.exe parameter1 parameter2
भले ही पर्यावरण चर के लिए Win32 सीमा 32,767 अक्षर है, कमांड प्रॉम्प्ट किसी भी पर्यावरण चर को अनदेखा करता है जो मूल प्रक्रिया से विरासत में मिला है और 2047 या 8191 वर्ण (ऑपरेटिंग सिस्टम के लिए उपयुक्त) की अपनी सीमाओं से अधिक लंबा है। SetEnvironmentVariable फ़ंक्शन देखें ।
स्रोत कमांड प्रॉम्प्ट (Cmd.exe) कमांड-लाइन स्ट्रिंग सीमा