如何在不接收空字符串的情况下获取主板ID

本文关键字:情况下 获取 主板 ID 字符串 | 更新日期: 2023-09-27 18:25:25

我尝试了很多东西:

//public static string GetMotherBoardID()
//{
//    string mbInfo = String.Empty;
//    //Get motherboard's serial number 
//    ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * From Win32_BaseBoard");
//    foreach (ManagementObject mo in mbs.Get())
//        mbInfo += mo["SerialNumber"].ToString();
//    return mbInfo;
//}
//public static string GetMotherBoardID()
//{
//    string mbInfo = String.Empty;
//    ManagementScope scope = new ManagementScope("''''" + Environment.MachineName + "''root''cimv2");
//    scope.Connect();
//    ManagementObject wmiClass = new ManagementObject(scope, new ManagementPath("Win32_BaseBoard.Tag='"Base Board'""), new ObjectGetOptions());
//    foreach (PropertyData propData in wmiClass.Properties)
//    {
//        if (propData.Name == "SerialNumber")
//            mbInfo = String.Format("{0,-25}{1}", propData.Name, Convert.ToString(propData.Value));
//    }
//    return mbInfo;
//}
public static string GetMotherBoardID()
{
    string mbInfo = String.Empty;
    ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * From Win32_BaseBoard");
    ManagementObjectCollection moc = mbs.Get();
    ManagementObjectCollection.ManagementObjectEnumerator itr = moc.GetEnumerator();
    itr.MoveNext();
    mbInfo = itr.Current.Properties["SerialNumber"].Value.ToString();
    var enumerator = itr.Current.Properties.GetEnumerator();
    if (string.IsNullOrEmpty(mbInfo))
        mbInfo = "0";
    return mbInfo;
}

这在我的电脑上都是空字符串,但在笔记本电脑上是正确的ID。另一些人也报告了两台电脑是空的主板ID。

结果:

public static string GetMotherBoardID()
{
    string mbInfo = String.Empty;
    ManagementObjectSearcher mbs = new ManagementObjectSearcher("Select * From Win32_BaseBoard");
    ManagementObjectCollection moc = mbs.Get();
    ManagementObjectCollection.ManagementObjectEnumerator itr = moc.GetEnumerator();
    itr.MoveNext();
    mbInfo = itr.Current.Properties["SerialNumber"].Value.ToString();
    var enumerator = itr.Current.Properties.GetEnumerator();
    string properties = "";
    while (enumerator.MoveNext())
    {
        properties += "[" + enumerator.Current.Name + "][" + (enumerator.Current.Value != null ? enumerator.Current.Value.ToString() : "NULL") + "]'n";
    }
    if (string.IsNullOrEmpty(mbInfo))
        mbInfo = "0";
    return mbInfo;
}
[Caption][Основная плата]
[ConfigOptions][NULL]
[CreationClassName][Win32_BaseBoard]
[Depth][NULL]
[Description][Основная плата]
[Height][NULL]
[HostingBoard][True]
[HotSwappable][False]
[InstallDate][NULL]
[Manufacturer][Gigabyte Technology Co., Ltd.]
[Model][NULL]
[Name][Основная плата]
[OtherIdentifyingInfo][NULL]
[PartNumber][NULL]
[PoweredOn][True]
[Product][H55M-S2H]
[Removable][False]
[Replaceable][True]
[RequirementsDescription][NULL]
[RequiresDaughterBoard][False]
[SerialNumber][ ]
[SKU][NULL]
[SlotLayout][NULL]
[SpecialRequirements][NULL]
[Status][OK]
[Tag][Base Board]
[Version][x.x]
[Weight][NULL]
[Width][NULL]

也许c#不适合检索这样的东西?我希望在C/C++上找到解决方案,或者在C#上找到工作解决方案

如何在不接收空字符串的情况下获取主板ID

有些主板根本没有ID。它设置为空字符串。所以,如果有人需要使用主板独特的东西进行许可,他们应该收到主板UUID。

就我个人而言,我建议使用这个特定的开源硬件监视器库(您需要源代码)。您可以使用它进行硬件识别。打开硬件监视器

还有一个名为DeviceID的NuGet包。然而,您需要在包中包含它们的DLL,但这是一个非常快速、简单的解决方案。

这里有一个用法示例:

 /* Depends on https://www.nuget.org/packages/DeviceId/ Install-Package DeviceId - Version 5.2.0*/
/* Using AddMacAddress(true, true) to exclude both virtual and wireless network adapters. */ 
readonly string MachineSupportID = new DeviceIdBuilder()
    .AddMacAddress(true, true)
    .AddMotherboardSerialNumber()
    .AddProcessorId()
    .AddSystemDriveSerialNumber()
    .ToString();

愿原力与你同在。