2009-08-29 4 views
2

J'ai écrit le code suivant pour obtenir le numéro de série du support physique, mais dans l'un de mes ordinateurs, il renvoie null à la place. Est-ce que quelqu'un sait quel est le problème? Merci.Problème avec Win32_PhysicalMedia Propriété SerialNumber

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

Voir aussi http://stackoverflow.com/questions/1502812/problem-with-wmi – finnw

Répondre

3

Le numéro de série est facultatif, défini par le fabricant et, pour votre périphérique, il est vide ou non pris en charge par le pilote.

Pratiquement tous les disques durs ont un numéro de série, mais pas la plupart des clés USB de type USB (problème de coût en général). J'imagine que la plupart des disques CD/DVD/BD non marqués seraient également non sérialisés.

+0

Le système que j'utilise a XP et Win7 RC1 et n'a qu'un seul disque dur installé, dans Win7 il renvoie le numéro de série du disque dur mais dans XP il renvoie null. – mrtaikandi

+0

Vous voulez dire que pour le même disque le numéro de série est retourné dans Windows 7 et non retourné dans Windows XP? Dans tous les cas, utilisez wbemtest.exe pour vérifier que votre code renvoie des valeurs correctes - si la propriété SerialNumber est dans Windows XP, vous ne pouvez pas faire grand chose à ce sujet. –

1

Voici le code que j'ai utilisé, le numéro de série est retourné brut avec chaque paire de caractères inversés (étrange) et en utilisant Win32_PhysicalMedia a donné des résultats différents si j'ai couru le code en tant qu'utilisateur ou administrateur 7 Ultimate, VS 2008 en utilisant VB seulement:

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 
Questions connexes