Determine operating system and processor type in C#

后端 未结 4 1957
谎友^
谎友^ 2021-02-05 21:03

I want to check what type of operating system i use and what kind of processor. this should be check on run time. i tried using

System.Environment.GetEnvironment         


        
相关标签:
4条回答
  • 2021-02-05 21:47

    To determine the operating system use this code:

    string OPSystemVersion = Environment.OSVersion.ToString();
    

    To determine the CPU name and type first add System.Management reference to your project, then you can use this code:

    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 讨论(0)
  • 2021-02-05 21:49

    Look at the ManagementClass class: 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();
    }
    
    0 讨论(0)
  • 2021-02-05 21:50

    Yes WMI is the best way to do this kind of stuff You can use this to retrieve OS informations :

    ManagementObjectSearcher objMOS = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM  Win32_OperatingSystem");
    
    0 讨论(0)
  • 2021-02-05 22:02

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

    Retrieving CPU info:

    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( "  ", " " );
    
    0 讨论(0)
提交回复
热议问题