2010-05-19 11 views
5

मेरा प्रश्न यहां है। यह निर्धारित करने का सबसे अच्छा तरीका क्या है कि आपका ऐप किस बिट आर्किटेक्चर पर चल रहा है?मेरा प्रोग्राम कैसे निर्धारित कर सकता है कि यह 32-बिट या 64-बिट विंडोज़ पर चल रहा है या नहीं?

मैं जो करना चाहता हूं: 64 बिट सर्वर पर मैं चाहता हूं कि मेरा ऐप 64 बिट डेटासोड्स (reg key Software \ Wow6432Node \ ODBC \ ODBC.INI \ ODBC डेटा स्रोतों में संग्रहीत) को पढ़े और यदि 32 बिट I 32 बिट डेटा स्रोतों को पढ़ना चाहते हैं, (यानी सॉफ्टवेयर \ ODBC \ ODBC.INI \ ODBC डेटा स्रोतों से पढ़ें)।

मुझे बिंदु याद आ रही है, लेकिन मैं इस बात की परवाह नहीं करना चाहता कि मेरा ऐप किस मोड में चल रहा है। मैं बस जानना चाहता हूं कि ओएस 32 या 64 बिट है या नहीं।

[System.Environment.OSVersion.Platform मेरे लिए इसे काटने वाला प्रतीत नहीं होता है। यह मेरी स्थानीय एक्सपी मशीन पर और Win2k8 64 बिट सर्वर पर Win32NT लौटा रहा है (यहां तक ​​कि जब मेरी सभी परियोजनाएं 'किसी भी सीपीयू' को लक्षित करने के लिए सेट की जाती हैं)]

+0

की डुप्लीकेट http://stackoverflow.com/questions/266082/how-do-i-tell-if-my- एप्लिकेशन-ए-रन-ए -32-या-64-बिट-एप्लिकेशन –

उत्तर

3

आपको सामान्य रूप से इसके बारे में चिंता भी नहीं करनी चाहिए। सिस्टम 64-बिट प्लेटफ़ॉर्म पर 32-बिट ऐप चलाते समय स्वचालित रूप से रजिस्ट्री क्वेरी को Software\Wow6432Node पर रीडायरेक्ट करता है।

+1

प्लेटफ़ॉर्म पर ध्यान दिए बिना अपना ऐप 32-बिट के रूप में चलाने के लिए, exe प्लेटफॉर्म को "x86 केवल" में बदलें। यह अभी भी x64 प्लेटफॉर्म पर चलाएगा और स्वचालित रूप से Wow6432Node कुंजी पर रीडायरेक्ट हो जाएगा। –

4

संपत्ति Environment.Is64BitOperatingSystem पर आज़माएं। यह ऑपरेटिंग सिस्टम के प्रकार की जांच के उद्देश्य से विशेष रूप से .NET 4.0 में जोड़ा गया एक नया है।

+0

धन्यवाद लेकिन मुझे यह उल्लेख करना चाहिए था कि मैं .NET 2.0 – user48408

2

आपको सीधे Wow6432Node नहीं पढ़ना चाहिए। 64-बिट ऐप के रूप में चलते समय 32-बिट दृश्य निर्दिष्ट करने के लिए RegistryView का उपयोग करें।

+0

तक प्रतिबंधित हूं दुर्भाग्य से 'रजिस्ट्री व्यू' केवल .NET 4.0 से उपलब्ध है। – Regent

4

सरल, सुरक्षित, ढांचा संस्करण नास्तिक रजिस्ट्री पर जाए बिना समाधान:

Console.WriteLine(
    "Is 64-bit? {0}", 
    (
     System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == sizeof(Int64) 
      ? "Yes" 
      : "No" 
    ) 
); 
+0

सुंदर सुरुचिपूर्ण! – code4life

+0

हाँ, लेकिन अगर यह 64 बिट मशीन पर 32 बिट मोड में चल रहा है तो ऊपर झूठी संख्या वापस आ जाएगी? – user48408

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

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