C# 无法获取C中的CPU序列号

C# 无法获取C中的CPU序列号,c#,system,C#,System,我正在尝试获取CPU序列号,但无法获取。我可以得到主板和硬盘,但不能得到cpu 下面是我的代码。我做错了什么 public static void GetClientComputerInfo() { HDDSerial = "0"; BoardSerial = "0"; CPUSerial = "0"; try { ManagementObjectSearcher searcher

我正在尝试获取CPU序列号,但无法获取。我可以得到主板和硬盘,但不能得到cpu

下面是我的代码。我做错了什么

public static void GetClientComputerInfo()
    {
        HDDSerial = "0";
        BoardSerial = "0";
        CPUSerial = "0";

        try
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_DiskDrive");

            foreach (ManagementObject share in searcher.Get())
            {
                foreach (PropertyData PC in share.Properties)
                {
                    if (PC.Name == "SerialNumber")
                    {
                        HDDSerial = PC.Value.ToString();
                    }

                    if (PC.Name == "SerialNumber")
                    {
                        BoardSerial = PC.Value.ToString();
                    }

                    if (PC.Name == "ProcessorID")
                    {
                        CPUSerial = PC.Value.ToString();
                    }
                }
            }
        }
        catch
        {

        }
    }
试试这个

 string cpuInfo = string.Empty;
    ManagementClass mc = new ManagementClass("win32_processor");
    ManagementObjectCollection moc = mc.GetInstances();

    foreach (ManagementObject mo in moc)
    {
         cpuInfo = mo.Properties["processorID"].Value.ToString();
         break;
    }

中提取的代码您正在尝试获取序列号,但是if语句的CPU部分正在检查PC.Name==ProcessorID?@Thewads:PC.Name随着每次foreach迭代而变化。Win32\u DiskDrive不提供处理器ID。您可以使用Select*FROM Win32\u Processor来搜索处理器ID。foreach循环中的这个“中断”有意义吗?对我来说,ManagementObjectCollection包含2值,但两者相同。我真的不知道为什么它有两个值。我认为这取决于CPU核心的数量。在这种情况下不需要foreach。但是,如果要打印所有值,我将控制台输出放在for循环中而不中断。如果有多个值,Foreach/break将获取第一个值,但如果集合为空,则防止索引超出范围异常。如果旧系统不提供值,并且您猜测[0]存在,则可能会发生这种情况。