【问题标题】:Determine operating system and processor type in C#在 C# 中确定操作系统和处理器类型
【发布时间】:2011-10-20 03:53:01
【问题描述】:

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

System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")

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

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

【问题讨论】:

    标签: c# .net operating-system wmi


    【解决方案1】:

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

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

    【讨论】:

    • 版本号列表以及它们对应的Windows版本可以在here找到。 Windows 7:6.1,Windows 8:6.2,Windows 8.1:6.3,Windows 10:10.0
    【解决方案2】:

    检索操作系统信息:

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

    获取 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( "  ", " " );
    

    【讨论】:

      【解决方案3】:

      是的,WMI 是做这类事情的最佳方式 您可以使用它来检索操作系统信息:

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

      【讨论】:

        【解决方案4】:

        查看 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();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-06
          • 2017-01-25
          • 1970-01-01
          相关资源
          最近更新 更多