我使用 Win32_BaseBoard SerialNumber 属性来获取主板序列号,它在大多数情况下都可以工作,但有时在某些计算机上我会得到 SerialNumber = "Base Board Serial Number" 结果。
是否有以更有效的方式获取此序列号的编程方式,或者这只是制造商的问题?我听说所有主板都带有序列号,无一例外。这是真的?
我使用 Win32_BaseBoard SerialNumber 属性来获取主板序列号,它在大多数情况下都可以工作,但有时在某些计算机上我会得到 SerialNumber = "Base Board Serial Number" 结果。
是否有以更有效的方式获取此序列号的编程方式,或者这只是制造商的问题?我听说所有主板都带有序列号,无一例外。这是真的?
各种 WMI 查询返回的序列号是否正确取决于设备的制造商。查看这个 stackoverflow 问题的答案,Motherboard ID - WMI C++ Reliable? 其中包含几个示例,表明您的结果可能会有所不同。
一些变量是设备是否为 OEM,以及设备是从向最终客户(如戴尔)销售的制造商购买,还是从将设备销售给然后配置设备的经销商的制造商购买,或者设备是从购买的零件。
这些结果正在处理由几个不同的 WMI 查询检索到的属性。
L"SELECT * FROM Win32_SystemEnclosure",
L"SELECT * FROM Win32_BaseBoard",
L"SELECT * FROM Win32_BIOS",
L"SELECT * FROM Win32_ComputerSystem",
L"SELECT * FROM Win32_ComputerSystemProduct",
L"SELECT * FROM Win32_MotherboardDevice",
例如,这里来自显示缺少序列号信息的销售终端。意图似乎是经销商或经销商或其他供应商将提供他们自己的序列号以及其他信息,以基本上重新标记终端。
Connected to ROOT\CIMV2 WMI namespace
Query for SELECT * FROM Win32_SystemEnclosure
SMBIOS SerialNumber: None
SMBIOS Name: System Enclosure
SMBIOS SMBIOSAssetTag: None
SMBIOS Manufacturer: To Be Filled By O.E.M.
Query for SELECT * FROM Win32_BaseBoard
SMBIOS SerialNumber: None
SMBIOS Product: EIN70-SAM
SMBIOS Name: Base Board
SMBIOS Manufacturer: INTEL Corporation
Query for SELECT * FROM Win32_BIOS
SMBIOS SerialNumber: None
SMBIOS Name: BIOS Date: 10/15/13 20:06:15 Ver: 04.06.05
SMBIOS Manufacturer: American Megatrends Inc.
Query for SELECT * FROM Win32_ComputerSystem
SMBIOS Name: GENPOSA-1
SMBIOS Manufacturer: To be filled by O.E.M.
Query for SELECT * FROM Win32_ComputerSystemProduct
SMBIOS Name: EIN70-SAM
SMBIOS IdentifyingNumber: None
SMBIOS UUID: 03000200-0400-0500-0006-000700080009
信息可能不会暴露给 WMI。您可以使用 wbemtest.exe(或 WMI CIM Studio,如果已安装)轻松确认这一点。在我当前的计算机上 Win32_BaseBoard.SerialNumber 不是 null 而是一个空字符串。如果是这种情况,您将需要找到另一种方法来获取此信息。
我有一个类似的问题。你可以试试这个查询,看看它是否适合你。select UUID from Win32_ComputerSystemProduct