我正在编写一个简单的客户端 - 服务器应用程序,作为人们使用我的网络连接到游戏服务器的界面。
为此,我需要获取其硬盘的序列号作为存储分数等的唯一ID,但是当我尝试访问序列号时应用程序崩溃:
System.Management.dll中出现未处理的“System.Management.ManagementException”类型异常
其他信息:名称空间无效
我环顾四周,这个问题似乎没有多少; one website提到'WMI就像死亡谷',我倾向于同意这一点。
我从Stack Overflow问题中获取了我的代码,它在应用程序的第一个版本中工作(我已经废弃,因为它有一些设计问题),所以为什么不呢?在应用程序的第二个(新)版本中工作?
两个版本都使用相同的库和引用,并且都是Windows窗体应用程序,因此基本上它们是相同的。 在Stack Overflow上似乎没有 nothing ,这是不寻常的。
错误发生在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
答案 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