我已经将我的项目从 4.8.x 升级到 .NET Framework 6.x 我可以启动它但不能调用一个 WMI 方法
GetObject("Winmgmts:").ExecQuery("SELECT * FROM Win32_LogicalDisk")
.这里是在 4.8.x 下运行的源代码
Dim strHDD As String = ""
Dim colDisks As Object
Dim objDisk As Object
Try
colDisks = GetObject("Winmgmts:").ExecQuery("SELECT * FROM Win32_LogicalDisk")
For Each objDisk In colDisks
Application.DoEvents()
Select Case objDisk.DriveType
Case 3
'lstServerMessage.Items.Add("-- HDD INFO --")
'lstServerMessage.Items.Add("Bezeichnung: " & objDisk.Caption & " - " & objDisk.VolumeName & " - Typ: Festplatte")
'lstServerMessage.Items.Add("Seriennummer: " & objDisk.VolumeSerialNumber)
'lstServerMessage.Items.Add("Dateisystem: " & objDisk.FileSystem)
'lstServerMessage.Items.Add("-- ENDE --")
'lstServerMessage.Items.Add("")
strHDD = objDisk.VolumeSerialNumber
Exit For
End Select
Next
Return strHDD
Catch ex As Exception
Return "-1"
End Try
异常部分中的错误消息:“{”找不到类型为“SWbemServicesEx”的公共成员“ExecQuery”。}”(没有谷歌搜索结果)。
我正在运行 Windows 11,但 .net framework 4.8.x 可以正常运行。
它应该运行直到找到 Drivetype = 3 并返回“VolumeSerial”。
我将在 VB.NET Framework 中收到的错误消息是“{”未找到类型为“SWbemServicesEx”的公共成员“ExecQuery”。}”
编辑:
nuget 包 https://www.nuget.org/packages/System.Management/ 提供了我们所需要的。 “提供对有关 Windows Management Instrumentation (WMI) 基础结构的系统、设备和应用程序的丰富管理信息和管理事件的访问。”
解决方案
' working @.net framework 6.x - 7.x
Dim colDisks As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk")
' working up to 4.8.x / WIN11
'colDisks = GetObject("Winmgmts:").ExecQuery("SELECT * FROM Win32_LogicalDisk")
For Each objDisk In colDisks.Get
Application.DoEvents()
Select Case objDisk("DriveType")
Case 3
'lstServerMessage.Items.Add("-- HDD INFO --")
'lstServerMessage.Items.Add("Bezeichnung: " & objDisk.Caption & " - " & objDisk.VolumeName & " - Typ: Festplatte")
'lstServerMessage.Items.Add("Seriennummer: " & objDisk.VolumeSerialNumber)
'lstServerMessage.Items.Add("Dateisystem: " & objDisk.FileSystem)
'lstServerMessage.Items.Add("-- ENDE --")
'lstServerMessage.Items.Add("")
strHDD = objDisk("VolumeSerialNumber")
Exit For
End Select
Next