我使用Win32_BaseBoard SerialNumber属性来获取主板序列号,它大部分时间都可以工作,但有时在某些计算机上我得到SerialNumber =“Base Board Serial Number”。
是否有一种编程方式以更有效的方式获取此序列号,或者它只是制造商的问题?我听说所有主板都带有序列号,没有例外。这是真的吗?
答案 0 :(得分:4)
各种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
答案 1 :(得分:1)
信息可能不会向WMI公开。您可以使用wbemtest.exe(或WMI CIM Studio,如果已安装它)轻松确认。在我当前的计算机上,Win32_BaseBoard.SerialNumber不为null,而是一个空字符串。如果是这种情况,您将需要找到另一种获取此信息的方法。
答案 2 :(得分:1)
我有类似的问题。您可以尝试此查询,看看它是否适合您。 select UUID from Win32_ComputerSystemProduct