2015-01-09 684 views
-2

我正在编写一个简单的客户端 - 服务器应用程序,作为人们使用我的网络连接到游戏服务器的界面。尝试使用WMI时出现'无效命名空间'错误

为此,我需要得到他们的硬盘驱动器的序列号作为唯一的ID,用于存储分数等,但但是当我试图访问的序列号的应用程序崩溃:

An unhandled exception of type 'System.Management.ManagementException' occurred in System.Management.dll

Additional information: Invalid namespace

enter image description here

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

我采购我的代码从一个堆栈溢出问题,它在应用程序的第一个版本的工作(因为它与设计的几个问题,我报废了),那么,为什么不将它在第二个工作(新)版本的应用程序?

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

的错误发生在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

尝试通过在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 
+0

我得到'类型'System.Management.ManagementPath'的值无法转换为'System.Management.ObjectGetOptions''错误。 – cybermonkey

+0

立即尝试使用已编辑的代码。 – RRUZ

+0

代码编译,但现在我回到原来的错误:http://puu.sh/eiaMp/33a2286671.png – cybermonkey