2010-08-25 59 views
0

我需要得到OsArchitecture指的O/s位获得操作系统的细节,我使用Win32_OperatingSystem但其“OsArchitecture”未对所有类型的操作系统如何在C#代码

ManagementObjectSearcher objOSDetails = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem"); 
      ManagementObjectCollection osDetailsCollection = objOSDetails.Get(); 
foreach(ManagementObject mo in osDetailsCollection) 
    { 
    String _operatingSysBits = mo["OSArchitecture"].ToString(); 

    } 
+1

的可能重复[如何检测的Windows 64位平台和.NET?](http://stackoverflow.com/questions/336633/how-to-detect-windows-64-bit-platform-with-net) – Powerlord 2010-08-25 17:46:10

回答

1

检查IntPtr.Size工作。它将在32位平台上为4,在64位平台上为8(除非您的进程在32位模式下运行)。

+2

在64位平台上运行为32位编译的.NET应用程序,它仍然是4。 – Powerlord 2010-08-25 17:46:45

+0

如果在Windows 64上作为32位进程运行,则不会。 – driis 2010-08-25 17:47:23

+0

什么是IntPtr.Size以及从何处获取它。 – 2010-08-25 17:50:18

0

用于.NET 4.0有Environment.is64BitOperatingSystem

ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'"); 
    object o = Mo["Architecture"]; 
    UInt16 sp = (UInt16)(o); 

    if (sp == 0) 
    { 
     //86 
    } else if (sp == 9) 
    { 
     //64 
    } 

    Mo.Dispose();