2011-08-04 11 views
8

Desidero verificare quale tipo di sistema operativo utilizzo e che tipo di processore. questo dovrebbe essere controllato in fase di esecuzione. Ho provato ad utilizzareDeterminare il sistema operativo e il tipo di processore in C#

System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") 

e

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

ma è solo l'ambiente che VS è in esecuzione.
Mi è stato detto di usare WMI per controllarlo ma non riesco a scoprire come. qualcuno può aiutarmi con quello?

risposta

5

Sì WMI è il modo migliore per fare questo genere di cose È possibile utilizzare questo per recuperare informazioni OS:

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

Recupero del sistema operativo info:

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(); 

recupero delle informazioni della 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

di determinare l'uso del sistema operativo di questo codice:

string OPSystemVersion = Environment.OSVersion.ToString(); 

per determinare il nome della CPU e il tipo di prima aggiungere il riferimento System.Management al progetto, quindi è possibile utilizzare questo codice:

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

Elenco dei numeri di versione e quale versione di Windows che corrispondono a può essere trovato [qui] (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

Problemi correlati