2011-08-04 17 views
8

Chcę sprawdzić, jakiego typu systemu operacyjnego używam i jakiego rodzaju procesor. powinno to być sprawdzanie w czasie wykonywania. Próbowałem za pomocąOkreślanie systemu operacyjnego i typu procesora w języku C#

System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") 

i

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

ale to tylko otoczenie, że VS działa dalej.
Powiedziano mi, żebym używał WMI do sprawdzenia, ale nie mogę się dowiedzieć, jak to zrobić. Czy ktoś może mi w tym pomóc?

Odpowiedz

5

Tak WMI jest najlepszym sposobem do tego rodzaju rzeczy można użyć tego odzyskać informacje OS:

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

przywracanie OS informacje:

var wmi = 
    new ManagementObjectSearcher("select * from Win32_OperatingSystem") 
    .Get() 
    .Cast<ManagementObject>() 
    .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(); 

pobierając informacje o CPU:

var cpu = 
    new ManagementObjectSearcher("select * from Win32_Processor") 
    .Get() 
    .Cast<ManagementObject>() 
    .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(" ", " "); 
2

celu określenia obsłudze system operacyjny ten kod:

string OPSystemVersion = Environment.OSVersion.ToString(); 

Aby określić nazwę procesora i wpisać najpierw dodać odniesienie System.Management do projektu, a następnie można użyć tego Kod:

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; 
     } 
+0

Lista numerów wersji i co wersja systemu Windows odpowiadają one można znaleźć [tutaj] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832 (v = vs.85) .aspx). Windows 7: 6.1, Windows 8: 6.2, Windows 8.1: 6.3, Windows 10: 10.0 – Adam

Powiązane problemy