【问题标题】:Why do I get an 'Invalid namespace' error when attempting to use WMI?为什么我在尝试使用 WMI 时会收到“无效的命名空间”错误?
【发布时间】:2015-01-09 16:38:16
【问题描述】:

我需要获取硬盘驱动器的序列号作为唯一 ID 用于用户识别,但是当我尝试访问序列号时程序崩溃:

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

附加信息:无效的命名空间

我环顾四周,似乎没有太多关于这个问题的信息; one website 提到“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

【问题讨论】:

  • 这不是关于弃用的 API - 它是关于一个非常稀缺的颠覆,不需要单独的标签。如果您绝对需要 .net 标签,请使用 .net-4.5,但是为在 interweebs 上几乎不可能找到的东西创建整个标签是完全没有意义的。来自标签创建特权:“您应该始终偏爱现有标签;仅当您认为您的问题确实涵盖了以前没有人问过的新主题时才创建新标签这个网站。” - 4.5 已经存在,如果更相关的话,4.6 也是如此。
  • @Zoe 我没有创建那个标签(除非它被烧毁并且我回滚编辑重新创建了它,在这种情况下我没有被系统警告过),但我'已经编辑了我的问题以删除一些绒毛并将标签替换为.net-4.5(当我问这个问题时,4.6 不存在,所以看不到任何使用它的理由)。

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


【解决方案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

【讨论】:

  • 我收到了 Value of type 'System.Management.ManagementPath' cannot be converted to 'System.Management.ObjectGetOptions' 错误。
  • 代码可以编译,但现在我又回到了原来的错误:puu.sh/eiaMp/33a2286671.png
  • 我刚刚测试了代码并且工作正常,可能是 WMI 存储库的问题,尝试重建 WMI (blogs.technet.com/b/askperf/archive/2009/04/13/…)
  • 刚刚尝试了该程序的第一个版本,但也因同样的错误而崩溃。我在操作系统上唯一改变的是我关闭了安全启动以运行测试签名的驱动程序。可能是这个。我不再需要这个了,所以我要关机,进入 BIOS 将其关闭,然后启动,看看是否完成。
  • 我可以确认是这台电脑,我在另一台电脑上试了一下,它工作得很好。我试图重建 WMI,但它告诉我它是一致的,当我尝试强制它时,它说它失败了,因为系统关键服务依赖它来运行。
猜你喜欢
  • 2014-08-20
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多