2010-02-11 30 views
5

मेरे पास एक WinForms एप्लिकेशन है जिसे ऑपरेटिंग सिस्टम के आधार पर विशिष्ट तरीकों (विशेष रूप से किसी निश्चित इंस्टॉलर को खोलना) में व्यवहार करने की आवश्यकता होती है।WinForms एप्लिकेशन के लिए यह निर्धारित करने का सबसे अच्छा तरीका क्या है कि यह निर्धारित करने के लिए कि कौन सी विंडोज ऑपरेटिंग सिस्टम चल रहा है?

मैं सिस्टम का उपयोग कर रहा हूं। ऑपरेटिंग सिस्टम क्लास, और प्लेटफॉर्मिड, मेजर, माइनर और बिल्ड नंबरों का संयोजन जो आपको वहां से अधिकतर तरीके से प्राप्त करता है।

दुर्भाग्य से, एक ऑपरेटिन सिस्टम सिस्टम के उचित, आपको कुछ प्लेटफार्मों के बीच सटीक अंतर करने की अनुमति नहीं देते हैं। जैसे विस्टा और विंडोज सर्वर 2008, या Vista 32 बिट और Vista 64 बिट। इसी प्रकार, एक्सपी 64 बिट प्रोफेशनल के पास सर्वर 2003 के समान संस्करण जानकारी है।

तो क्या यह निर्धारित करना संभव है कि आप WinForms ऐप (सी # का उपयोग करके) किस विंडोज ऑपरेटिंग सिस्टम पर चल रहे हैं?

+1

XP 64 सभी व्यावहारिक उद्देश्यों के लिए सर्वर 2003 है। तो आपको बस 32 बिट से 64 बिट बताने का एक तरीका चाहिए - है ना? –

+1

इसे देखें ... http: //stackoverflow.com/questions/57124/how-to-detect-true-windows-version – t0mm13b

उत्तर

4

32 बिट और 64 बिट के बीच अंतर करने का सबसे आसान तरीका पर्यावरणीय चर PROCESSOR_ARCHITECTURE के माध्यम से है।

string value = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); 

अगर आप 32 बिट विंडोज पर इस कोड को चलाने के लिए, value या तो "86" या खाली हो जाएगा। 64 बिट विंडोज़ पर मुझे लगता है कि यह "x86" के अलावा कुछ भी सेट हो जाएगा। गन्दा की तरह लेकिन अब तक यह विंडोज के सभी संस्करणों पर काम करता है जहां आप .NET प्रोग्राम निष्पादित कर सकते हैं।

आप ऑपरेटिंग सिस्टम के बारे में व्यावहारिक रूप से सभी जानकारी पूछने के लिए और अधिक आधुनिक WMI का उपयोग भी कर सकते हैं, लेकिन यह केवल विंडोज 2000 या नए पर काम करेगा। यदि आप इसके साथ रह सकते हैं, check this blog post for some examples

+1

मेरे ब्लॉग से जोड़ने के लिए धन्यवाद! +1 :- डी –

2

यह मेरी कंपनी में एक विरासत ऐप के लिए एक साल पहले किया गया था ... मुझे नहीं पता कि यह सबसे वर्तमान तरीका है, लेकिन यह निश्चित रूप से काम करता है।

If Environment.OSVersion.Platform = PlatformID.Win32NT Then 
     If major <= 4 Then 
      ret = "Windows NT 4.0" 
      _usingNT4 = True 
     ElseIf major > 6 Then 
      ret = "Windows Vista" 
     ElseIf major = 5 And minor = 0 Then 
      ret = "Windows 2000" 
     Else 
      ret = "Windows XP" 
     End If 
    Else 
     If major > 4 Or (major = 4 And minor >= 90) Then 
      ret = "Windows ME" 
     ElseIf (major = 4 And minor >= 10 And minor < 90) Then 
      ret = "Windows 98" 
     Else 
      ret = "Windows 95" 
     End If 
    End If 
+1

धन्यवाद। मैंने भी उस जानकारी का उपयोग किया है लेकिन Vista32 और Vista64 आदि की पसंद के बीच अंतर करने की कोशिश करते समय कुछ संघर्ष हैं। –

1

तुम सच में सभी विवरण की जरूरत है, मुझे लगता है कि आप अभी भी अच्छा पुराने GetVersionEx Win32 एपीआई के उपयोग कर सकते हैं।

वास्तव में यह .NET नहीं है (सख्ती से बोल रहा है), लेकिन एक .NET अनुप्रयोग में प्रयोग योग्य है। here देखें।

3

आप Win32_OperatingSystem प्रबंधन कक्षा के लिए जानकारी पुनर्प्राप्त करने के लिए WMI का उपयोग कर सकते हैं।

कोड WMI Code Creator साथ उत्पन्न:

using System; 
using System.Management; 
using System.Windows.Forms; 

namespace WMISample 
{ 
    public class MyWMIQuery 
    { 
     public static void Main() 
     { 
      try 
      { 
       ManagementObjectSearcher searcher = 
        new ManagementObjectSearcher("root\\CIMV2", 
        "SELECT * FROM Win32_OperatingSystem"); 

       foreach (ManagementObject queryObj in searcher.Get()) 
       { 
        Console.WriteLine("-----------------------------------"); 
        Console.WriteLine("Win32_OperatingSystem instance"); 
        Console.WriteLine("-----------------------------------"); 
        Console.WriteLine("BuildNumber: {0}", queryObj["BuildNumber"]); 
        Console.WriteLine("Caption: {0}", queryObj["Caption"]); 
        Console.WriteLine("OSArchitecture: {0}", queryObj["OSArchitecture"]); 
        Console.WriteLine("OSLanguage: {0}", queryObj["OSLanguage"]); 
        Console.WriteLine("Version: {0}", queryObj["Version"]); 
       } 
      } 
      catch (ManagementException e) 
      { 
       MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); 
      } 
     } 
    } 
} 
1

यहाँ एक सरल तरीका है:

string os = Environment.OSVersion.VersionString; 

... मेरी ओएस के लिए, ऊपर रिटर्न निम्नलिखित:

माइक्रोसॉफ्ट विंडोज एनटी 6.1। 7600.0

उम्मीद है कि इससे मदद मिलती है।

+0

धन्यवाद। मैंने इस सेटिंग के साथ खेला है लेकिन यह 32 और 64 बिट के बीच अंतर नहीं करता है। मेरा समाधान हालांकि इन सभी उत्तरों का उपयोग करके समाप्त हो जाएगा, इसलिए सभी को धन्यवाद। –

+0

आपका स्वागत है, और मुझे आशा है कि आपको समाधान मिलेगा। –

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