为什么我在尝试使用 WMI 时收到“无效命名空间”错误?

问题描述 投票:0回答:2

我需要获取硬盘的序列号作为用户识别的唯一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
vb.net namespaces wmi .net-4.5
2个回答
3
投票

尝试传递

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
投票

恢复 WMI 解决了我的问题:

  1. 以管理员身份打开命令提示符:
  2. 一次运行以下命令: winmgmt /验证存储库 winmgmt /salvagerepository winmgmt /重置存储库
  3. 重新启动计算机。
© www.soinside.com 2019 - 2024. All rights reserved.