2010-01-29 2 views
13

मेरा ओएस 64 बिट्स है और फोल्डर सी: \ विंडोज \ SysWOW64 में एक फ़ाइल 111.txt है, लेकिन c: \ windows \ system32जांचें कि फ़ाइल का उपयोग कर 64 बिट्स सिस्टम पर फ़ाइल मौजूद है या नहीं। फ़ाइल 0E34ists

लेकिन follwoing कोड वापसी सच

file = @"C:\Windows\System32\111.txt";  
bool bExist = System.IO.File.Exists(file); 

मैं पता नहीं क्यों? और मैं कैसे जांच सकता हूं कि फ़ाइल 32.txt फ़ाइल 32 के तहत SysWoW64 नहीं है?

उत्तर

16

क्योंकि बहुत से अनुप्रयोगों ने System32 निर्देशिका नाम को पथ में हार्ड-कोड किया है, एमएस ने 'सिस्टम 64' निर्देशिका के बजाय 64-बिट सिस्टम फ़ाइलों को रखा है। 32-बिट संस्करण अब 'SysWOW64' निर्देशिका में जाते हैं (यह काफी उलझन में है)। लेकिन 32-बिट प्रोग्राम तोड़ने से रोकने के लिए, सिस्टम 'System32' निर्देशिका तक पहुंचने का प्रयास करने वाली 32-बिट प्रक्रियाओं के लिए डिफ़ॉल्ट रूप से एक पुनर्निर्देशन करता है। ज्यादातर मामलों में, जब भी 32-बिट अनुप्रयोग% windir% \ System32 तक पहुंचने का प्रयास करता है, तो एक्सेस को% windir% \ SysWOW64 पर रीडायरेक्ट किया जाता है।

इस पुनर्निर्देशन के आसपास जाने का एक आसान तरीका % windir% \ Sysnative% windir% \ System32 के बजाय उपयोग करना है। Win64 उस निर्देशिका को वास्तविक सिस्टम 32 निर्देशिका में 'रीडायरेक्ट' करेगा।

आप इस पुनर्निर्देशन को पूरी तरह अक्षम करने के लिए Wow64DisableWow64FsRedirection() API का उपयोग कर सकते हैं। विवरण के लिए http://msdn.microsoft.com/en-us/library/aa384187.aspx देखें।

+0

बहुत बहुत धन्यवाद। रिकॉर्ड के लिए मुझे पता चला कि इस मेटा डीआईआर "sysnative" का उपयोग विश्वसनीय नहीं है, यह हमेशा अपेक्षित काम नहीं करता है। मैन्युअल रूप से चेक किया गया है कि ओएस 32-बिट ओ 64-बिट है, और मैन्युअल रूप से subdir चुना है। – greenoldman

5

32 बिट प्रक्रियाएं C: \ Windows \ SysWOW64 निर्देशिका की सामग्री को देखते हैं जब वे C: \ Windows \ System32 निर्देशिका के लिए पूछते हैं।

इसके अतिरिक्त, जब फ़ाइल को C: \ Windows \ System32 में सहेजने का प्रयास करते समय, यह C: \ Windows \ SysWOW64 में समाप्त हो जाएगा।

हालांकि, जब तक कि आप एक इंस्टॉलर-प्रकार प्रोग्राम नहीं लिख रहे हैं, तो शायद आप इन निर्देशिकाओं के साथ गड़बड़ नहीं करना चाहते हैं। सी: \ विंडोज \ System32 में सभी बाइनरी 64 बिट हैं और 32 बिट प्रक्रियाओं से उपयोग योग्य नहीं हैं। यही कारण है कि उनके लिए अनुरोध पहली बार सी: \ विंडोज \ SysWOW64 पर रीडायरेक्ट किया गया है।

संपादित करें: यदि आप वास्तव में फ़ाइलों को देखना चाहते हैं, तो Wow64DisableWow64FsRedirection का उपयोग PInvoke के माध्यम से करें।

+5

यह "64" और 32-बिट बाइनरी के साथ समाप्त होने वाले फ़ोल्डर में "64" के साथ समाप्त होने वाले फ़ोल्डर में 64-बिट बाइनरी डालने के लिए पुराना पुराना माइक्रोसॉफ्ट जैसा है। हां, मुझे पता है कि WOW64 "विंडोज 64 पर विंडोज़" के लिए खड़ा है, लेकिन नामकरण विकल्प अभी भी भयानक है। –

+4

तो क्या यह माइक्रोसॉफ्ट की गलती है कि इतने सारे प्रोग्रामर "system32" को कड़ी-कोडित करते हैं? –

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