2009-08-29 3 views
2

物理メディアのシリアル番号を取得するために次のコードを書きましたが、いずれかのコンピュータでは代わりにnullが返されます。 誰が問題が何であるか知っていますか?おかげさまで Win32_PhysicalMedia SerialNumberプロパティの問題

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

も参照してくださいhttp://stackoverflow.com/questions/1502812/problem-with-wmi – finnw

答えて

3

シリアル番号はオプションで、メーカーによって定義されています。お使いのデバイスは、空白またはサポートされていません。

ほとんどすべてのハードドライブはシリアル番号を持っていますが、ほとんどのUSBスタイルのフラッシュメモリスティックは(一般的にコストの問題がありません)。私は、ほとんどのブランドのないCD/DVD/BDディスクもシリアル化されていないと思います。

+0

システムはXPとwin7のRC1の両方を持っており、唯一のHDDを持っていますWin7ではHDDのシリアル番号を返しますが、XPではnullを返します。 – mrtaikandi

+0

Windows 7では同じディスクのシリアル番号が返され、Windows XPでは返されません。いずれにせよ、wbemtest.exeを使用して、コードが正しい値を返すことを確認します.Windows XPではSerialNumberプロパティがであれば、それほど多くのことはできません。 –

1

ここで使用したコードは、シリアル番号はどういうわけか文字の各ペアが逆転して(奇妙な)返され、Win32_PhysicalMediaを使用すると、ユーザーまたは管理者としてコードを実行した場合、 7究極、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 
関連する問題