【问题标题】:Problem with Win32_PhysicalMedia SerialNumber propertyWin32_PhysicalMedia SerialNumber 属性的问题
【发布时间】:2012-12-08 22:00:03
【问题描述】:

我编写了以下代码来获取物理媒体序列号,但在我的一台计算机中它返回 null。 有谁知道问题是什么? 谢谢。

var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
foreach( ManagementObject mo in searcher.Get() )
{
    Console.WriteLine("Serial: {0}", mo["SerialNumber"]);
}

【问题讨论】:

标签: wmi


【解决方案1】:

序列号是可选的,由制造商定义,对于您的设备,它是空白或不受驱动程序支持。

几乎所有硬盘都有序列号,但大多数 USB 式闪存棒没有(通常是成本问题)。我想大多数无品牌的 CD/DVD/BD 光盘也是非序列化的。

【讨论】:

  • 我用的系统有XP和Win7 RC1,只安装了一个硬盘,Win7返回硬盘序列号,XP返回null。
  • 您的意思是对于同一个磁盘,序列号在 Windows 7 中返回,而在 Windows XP 中不返回?在任何情况下,使用 wbemtest.exe 来验证您的代码是否返回正确的值 - 如果在 Windows XP 中 SerialNumber 属性为 ,那么您无能为力。
【解决方案2】:

这是我使用的代码,序列号以某种方式返回原始,每对字符反转(奇怪),如果我以用户或管理员身份运行代码(更奇怪),使用 Win32_PhysicalMedia 会给出不同的结果 - Windows 7 Ultimate,VS 2008,仅使用 VB:

Function GetHDSerial() As String
    Dim strHDSerial As String = String.Empty
    Dim index As Integer = 0
    Dim Data As String
    Dim Data2 As String
    Dim ndx As Integer

    Dim query As New SelectQuery("Win32_DiskDrive")
    Dim search As New ManagementObjectSearcher(query)
    Dim info As ManagementObject
    Try
        For Each info In search.Get()
            Data = info("SerialNumber")
            Data2 = ""
            For ndx = 1 To Data.Length - 1 Step 2
                Data2 = Data2 & Chr(Val("&H" & Mid(Data, ndx, 2)))
            Next ndx
            Data = String.Empty
            For ndx = 1 To Data2.Length - 1 Step 2
                Data = Data & Mid(Data2, ndx + 1, 1) & Mid(Data2, ndx, 1)
            Next
            Data2 = Data
            If Len(Data) < 8 Then Data2 = "00000000" 'some drives have no s/n
            Data2 = Replace(Data2, " ", "") ' some drives pad spaces in the s/n
            'forget removeable drives
            If InStr(info("MediaType").ToString, "Fixed", CompareMethod.Text) > 0 Then
               strHDSerial = strHDSerial & "Drive " & index.ToString & " SN: " & Data2 & vbCrLf
               index += 1
            End If
        Next
    Catch ex As Exception
        strHDSerial = "Error retrieving SN for Drive " 
        msgbox(index.ToString)
    End Try
    Return strHDSerial
End Function

【讨论】:

    猜你喜欢
    • 2012-06-29
    • 2010-10-18
    • 2010-10-27
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    相关资源
    最近更新 更多