टी एल; डॉ:
संक्षेप में, नहीं, यह आवश्यक नहीं है ; वे एक एकल फ़ोल्डर का उपयोग कर सकते थे , और नहीं, विंडोज एक स्थान या किसी अन्य से चलाए जा रहे कार्यक्रम के लिए खुद को अलग ढंग से पेश नहीं करता है।
खैर, हर कोई इस पर अपनी राय देने में लगा हुआ है, इसलिए मैं अपने 2 be में टॉस करूंगा। अन्य लोगों ने पहले ही कारणों पर अनुमान लगा लिया है कि Microsoft ने 32-बिट और 64-बिट संस्करणों के लिए अलग-अलग शीर्ष-स्तरीय फ़ोल्डर बनाने के लिए क्यों चुना, इसलिए मैं वह हिस्सा छोड़ दूंगा (सबसे अच्छा कारण डेविड का स्पष्टीकरण था कि यह एक के रूप में है प्रोग्रामर को सुविधा)। निश्चित रूप से तब भी, यह प्रत्यक्ष प्रश्न को संबोधित नहीं करता है कि यह आवश्यक क्यों है? , जिसका उत्तर संभवतः है: यह नहीं है ।
इसके बजाय, मैं प्रश्न के मुख्य निकाय को संबोधित करूंगा
क्या विंडोज़ किसी तरह खुद को "प्रोग्राम फाइल्स (x86)" से बाहर चलने वाले प्रोग्राम में अलग से पेश करता है?
वास्तव में नहीं, लेकिन कार्यक्रम का स्थान व्यवहार को प्रभावित कर सकता है, लेकिन उस तरीके से नहीं जैसा आप सोचते हैं।
जब आप कोई प्रोग्राम चलाते हैं, तो विंडोज एक ऐसा वातावरण तैयार करता है, जिसमें इसे चलाने के लिए (मेरा मतलब मेमोरी, एड्रेसिंग आदि के संदर्भ में है, न कि सिर्फ पर्यावरण चर)। यह वातावरण निष्पादन योग्य की सामग्री पर निर्भर करता है (32-बिट और 64-बिट प्रोग्राम आंतरिक रूप से भिन्न होते हैं)। जब आप 64-बिट सिस्टम पर 32-बिट प्रोग्राम चलाते हैं, तो यह 32-बिट सबसिस्टम में चलता है जो 32-बिट वातावरण का अनुकरण करता है। इसे WoW64 कहा जाता है (WoW64 का अर्थ है विंडोज पर विंडोज 64-बिट ) और यह उसी तरह है जैसे कि NTVDM का उपयोग करके XP में 16-बिट ऐप्स चलाए जाएंगे ।
जब आप व्यवस्थापक विशेषाधिकारों के साथ या उसके बिना एक कार्यक्रम चलाते हैं, तो यह प्रभावित करता है कि यह कैसे चलता है, लेकिन स्थान को इसे प्रभावित नहीं करना चाहिए (हालांकि उदाहरण के लिए कुछ ड्राइवरों की तरह स्थान निर्भरता के कुछ उदाहरण हैं)।
(मैं एक अलग कंप्यूटर का उपयोग कर रहा हूं, इसलिए मैं अपने कदमों को पीछे हटाने के लिए अपने ब्राउज़र के इतिहास पर भरोसा नहीं कर सकता, लेकिन दूसरे दिन इस एसयू प्रश्न का उत्तर देते समय मैं इस एसओ प्रश्न पर समाप्त हो गया, जिसके कारण मुझे Google PROCESSOR_ARCHITEW6432 मिला, जिससे इस एसओ प्रश्न और यह Microsoft ब्लॉग पोस्टिंग ।)
रास्ते में कहीं, मैंने एक StackOverflow पोस्ट के बारे में पढ़ा कि कैसे envirnoment वैरिएबल %processor_architecutre%
अलग-अलग परिणाम देता है जिसके आधार पर आप कमांड-प्रॉम्प्ट से चलाते हैं (मैं सटीक उद्धरण खोजने की कोशिश करूँगा)।
उत्तर यह निकला कि क्या कमांड प्रॉम्प्ट का 32-बिट या 64-बिट संस्करण चलाया गया था (यानी, से System32\
या SysWoW64\
)। दूसरे शब्दों में, जबकि स्थान प्रोग्राम के व्यवहार को प्रभावित करता है, यह केवल इसलिए है क्योंकि प्रोग्राम के विभिन्न संस्करण हैं, इसलिए नहीं कि विंडोज फ़ोल्डर को एक विशेष तरीके से व्यवहार करता है।
यह समझ में आता है क्योंकि निष्पादन योग्य फ़ाइल की सामग्री 32-बिट या 64-बिट निर्धारित करती है, इसलिए आप एक ही प्रोग्राम में (जैसे, foobar32.exe
और foobar64.exe
) दोनों 32-बिट और 64-बिट कॉपी एक ही फ़ोल्डर में रख सकते हैं और जब आप उन्हें निष्पादित करें, उन्हें सही तरीके से लोड किया जाएगा (64-बिट संस्करण को मूल रूप से चलाया जाएगा और 32-बिट वाले को WoW64 अनुकरण परत में चलाया जाएगा)।
FreePascal आपको DOS और Windows दोनों संस्करणों को स्थापित करने की अनुमति देता है और वे एक ही फ़ोल्डर में जाते हैं %programfiles%\FreePascal
:। यह निष्पादन योग्य फ़ाइलों (रखकर विभिन्न आर्किटेक्चर का प्रबंधन करता है .exe
, .sys
, .dll
, .ovr
, आदि) अलग फ़ोल्डर में और, स्रोत फ़ाइलें, आदि) कोई तकनीकी कारण यह है कि यह भी 32- और के लिए नहीं किया जा सकता है है चित्रों की तरह संसाधन फ़ाइलें साझा एक कार्यक्रम के 64-बिट संस्करण। जैसे डेविड ने कहा, प्रोग्रामर के लिए यह आसान है अगर उन्हें अलग रखा जाए (जैसे, चर का उपयोग करके यह देखना कि यह फाइलों का एक सेट है, आदि)