我需要获取硬盘的序列号作为用户识别的唯一ID,但是当我尝试访问序列号时程序崩溃了:
System.Management.dll 中发生“System.Management.ManagementException”类型的未处理异常
附加信息:无效的命名空间
我环顾四周,似乎没有太多关于这个问题的问题; 一个网站提到“WMI 就像死亡谷”,我倾向于同意这一点。
错误发生在
moHD.[Get]()
。
为什么我会收到此错误,如何修复它?
代码:
Public Function getSerial(ByVal strDrive As String) As String 'Get HD Serial Number
If strDrive = "" OrElse strDrive Is Nothing Then
strDrive = "C"
End If
Dim moHD As New ManagementObject("Win32_LogicalDisk.DeviceID=""" + strDrive + ":""")
moHD.[Get]()
Return moHD("VolumeSerialNumber").ToString()
End Function
尝试传递
Win32_LogicalDisk
类所在的命名空间。检查这个样本:
Public Function getSerial(ByVal strDrive As String) As String 'Get HD Serial Number
If strDrive = "" OrElse strDrive Is Nothing Then
strDrive = "C"
End If
Dim scope As New ManagementScope("\\.\root\cimv2")
Dim path As New ManagementPath("Win32_LogicalDisk.DeviceID=""" + strDrive + ":""")
Dim moHD As New ManagementObject(scope, path, Nothing)
moHD.[Get]()
Return moHD("VolumeSerialNumber").ToString()
End Function
恢复 WMI 解决了我的问题: