尝试使用WMI时出现“无效的命名空间”错误

时间:2015-01-09 16:38:17

标签: vb.net namespaces wmi .net-4.5.3

我正在编写一个简单的客户端 - 服务器应用程序,作为人们使用我的网络连接到游戏服务器的界面。

为此,我需要获取其硬盘的序列号作为存储分数等的唯一ID,但是当我尝试访问序列号时应用程序崩溃:

  

System.Management.dll中出现未处理的“System.Management.ManagementException”类型异常

     

其他信息:名称空间无效

enter image description here

我环顾四周,这个问题似乎没有多少; one website提到'WMI就像死亡谷',我倾向于同意这一点。

我从Stack Overflow问题中获取了我的代码,它在应用程序的第一个版本中工作(我已经废弃,因为它有一些设计问题),所以为什么不呢?在应用程序的第二个(新)版本中工作?

两个版本都使用相同的库和引用,并且都是Windows窗体应用程序,因此基本上它们是相同的。 在Stack Overflow上似乎没有 nothing ,这是不寻常的。

错误发生在moHD.[Get]()

enter image description here

为什么我会收到此错误,我该如何解决?

代码:

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

1 个答案:

答案 0 :(得分:1)

尝试传递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