我使用 Win32_BaseBoard SerialNumber 属性来获取主板序列号,它在大多数情况下都有效,但有时在某些计算机中我会得到 SerialNumber =“基板序列号”。
是否有一种编程方法可以更有效地获取此序列号,或者这只是制造商的问题?我听说所有主板都带有序列号,无一例外。这是真的?
各种 WMI 查询返回的序列号是否正确取决于设备的制造商。请参阅此 stackoverflow 问题的答案:主板 ID - WMI C++ 可靠吗?其中包含几个示例,表明您的结果可能会有所不同。
其中一些变量包括设备是否是 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",
Run Code Online (Sandbox Code Playgroud)
例如,这里来自销售点终端,显示丢失的序列号信息。其目的似乎是经销商或经销商或其他供应商将提供他们自己的序列号以及其他信息,以基本上重新标记终端。
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
Run Code Online (Sandbox Code Playgroud)
小智 1
该信息可能未暴露给 WMI。您可以使用 wbemtest.exe(或 WMI CIM Studio,如果已安装)轻松确认这一点。在我当前的计算机上,Win32_BaseBoard.SerialNumber 不是 null,而是一个空字符串。如果是这种情况,您将需要寻找其他方法来获取此信息。