在C#中确定操作系统和处理器类型

我想检查一下我使用的操作系统类型和处理器类型。 这应该在运行时检查。 我试过用

System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") 

 System.OperatingSystem osInfo2 = System.Environment.OSVersion; Console.WriteLine(osInfo2.ToString()); 

但这只是VS正在运行的环境。
有人告诉我使用WMI检查它,但我不知道如何。 有人可以帮助我吗?

是WMI是执行此类操作的最佳方式您可以使用它来检索操作系统信息:

 ManagementObjectSearcher objMOS = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_OperatingSystem"); 

检索操作系统信息:

 var wmi = new ManagementObjectSearcher( "select * from Win32_OperatingSystem" ) .Get() .Cast() .First(); OS.Name = ((string)wmi["Caption"]).Trim(); OS.Version = (string)wmi["Version"]; OS.MaxProcessCount = (uint)wmi["MaxNumberOfProcesses"]; OS.MaxProcessRAM = (ulong)wmi["MaxProcessMemorySize"]; OS.Architecture = (string)wmi["OSArchitecture"]; OS.SerialNumber = (string)wmi["SerialNumber"]; OS.Build = ((string)wmi["BuildNumber"]).ToUint(); 

检索CPU信息:

 var cpu = new ManagementObjectSearcher( "select * from Win32_Processor" ) .Get() .Cast() .First(); CPU.ID = (string)cpu["ProcessorId"]; CPU.Socket = (string)cpu["SocketDesignation"]; CPU.Name = (string)cpu["Name"]; CPU.Description = (string)cpu["Caption"]; CPU.AddressWidth = (ushort)cpu["AddressWidth"]; CPU.DataWidth = (ushort)cpu["DataWidth"]; CPU.Architecture = (CPU.CpuArchitecture)(ushort)cpu["Architecture"]; CPU.SpeedMHz = (uint)cpu["MaxClockSpeed"]; CPU.BusSpeedMHz = (uint)cpu["ExtClock"]; CPU.L2Cache = (uint)cpu["L2CacheSize"] * (ulong)1024; CPU.L3Cache = (uint)cpu["L3CacheSize"] * (ulong)1024; CPU.Cores = (uint)cpu["NumberOfCores"]; CPU.Threads = (uint)cpu["NumberOfLogicalProcessors"]; CPU.Name = CPU.Name .Replace( "(TM)", "™" ) .Replace( "(tm)", "™" ) .Replace( "(R)", "®" ) .Replace( "(r)", "®" ) .Replace( "(C)", "©" ) .Replace( "(c)", "©" ) .Replace( " ", " " ) .Replace( " ", " " ); 

要确定操作系统,请使用以下代码:

 string OPSystemVersion = Environment.OSVersion.ToString(); 

要确定CPU名称和类型,首先添加对项目的System.Management引用,然后您可以使用以下代码:

 public static string SendBackProcessorName() { ManagementObjectSearcher mosProcessor = new ManagementObjectSearcher("SELECT * FROM Win32_Processor"); string Procname = null; foreach (ManagementObject moProcessor in mosProcessor.Get()) { if (moProcessor["name"] != null) { Procname = moProcessor["name"].ToString(); } } return Procname; } 

查看ManagementClass类: http : //msdn.microsoft.com/en-us/library/system.management.managementclass.aspx

 var mgmt = new ManagementClass("Win32_OperatingSystem"); foreach (ManagementObject mgmtObj in mgmt.GetInstances()) { // Just get first value. return mgmtObj[info.Information].ToString().Trim(); }