可以在 .NET Framework 应用程序中使用标准 WMI 查询。WMI 查询使用 WMI 查询语言 (WQL),该语言是 SQL 的一个子集。查询字符串存储在 .NET Framework 查询类中(例如 SelectQuery 类、WqlEventQuery 类或 RelatedObjectQuery 类),并由 ManagementObjectSearcher 或 ManagementEventWatcher 类构造函数进行调用。
有关更多信息,请参见 MSDN Library(网址为 http://msdn.microsoft.com/library)中 Windows Management Instrumentation 文档中的“使用 WQL 查询”。
查询通过包含以下内容限制返回的数据量:
-
SELECT 子句,指定只返回某些属性的数据。
-
WHERE 子句,指定要返回的实例。
例如,以下查询选择计算机上所有可用空间小于 2 MB 的驱动器(驱动器 C、D 等):
SELECT * FROM Win32_LogicalDisk WHERE FreeSpace < 2000000
查询类的类型
.NET Framework 中的 WMI 包含 Framework 架构中的许多查询类。有些查询类执行特定类型的 WQL 查询,例如 WQL SELECT 查询或 WQL ASSOCIATORS OF 查询。
下表显示可以用于生成 WMI 数据查询的查询类。
.NET Framework 类 | 说明 |
---|---|
WMI 事件查询。在 ManagementEventWatcher 类的构造函数中,使用此类或其派生类的对象预订 WMI 事件。尽可能使用此类更具体的派生类,例如 WqlEventQuery 类。 | |
派生其他查询类的抽象基类。 | |
可以返回实例或类的 WMI 对象的查询。 | |
RelatedObjectQuery | 一种 WQL ASSOCIATORS OF 查询,既可以用于实例查询又可以用于架构查询,视请求的是类还是实例子集而定。用于在 ManagementObjectSearcher 类的构造函数中指定查询,以获取通过关联类进行关联的类的所有实例。 |
一种 WQL REFERENCES OF 查询,既可以用于实例查询又可以用于架构查询,视请求的是类还是实例子集而定。 | |
SelectQuery | 一种 WQL SELECT 查询,既可以用于实例查询又可以用于架构查询,视请求的是类还是实例子集而定。有关更多信息,请参见 MSDN Library(网址为 http://msdn.microsoft.com/library)中 Windows Management Instrumentation 文档中的“用于数据查询的 SELECT 语句”、“用于事件查询的 SELECT 语句”或“用于架构查询的 SELECT 语句”。 |
WqlEventQuery | WQL 格式的 WMI 事件查询。在 ManagementEventWatcher 类中使用此类或其派生类的对象预订 WMI 事件。 |
WqlEventQuery | WQL 格式的 WMI 查询。在 ManagementObjectSearcher 类的构造函数中使用此类或其派生类的对象指定查询。为了更具体,尽可能使用此类更简明的派生类,例如 SelectQuery 类。 |
下图显示 .NET Framework 类库中的 WMI 查询类的继承。.NET Framework 中的 WMI 包含对象查询类和事件查询类。
查询类和 WQL 查询
using System; using System.Management; class Query_SelectQuery { public static int Main(string[] args) { SelectQuery selectQuery = new SelectQuery("Win32_LogicalDisk"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery); foreach (ManagementObject disk in searcher.Get()) { Console.WriteLine(disk.ToString()); } Console.ReadLine(); return 0; } }
此代码示例使用 SELECT 查询的原始 WQL 形式。
Imports System Imports System.Management Public Class Query_Select_FullString Public Overloads Shared Function _ Main(ByVal args() As String) As Integer Dim wqlQuery As WqlObjectQuery wqlQuery = New WqlObjectQuery( _ "SELECT * FROM Win32_LogicalDisk") Dim searcher As ManagementObjectSearcher searcher = New ManagementObjectSearcher(wqlQuery) Dim disk As ManagementObject For Each disk In searcher.Get() Console.WriteLine(disk.ToString()) Next Console.ReadLine() Return 0 End Function End Class
using System; using System.Management; class Query_Select_FullString { public static int Main(string[] args) { WqlObjectQuery wqlQuery = new WqlObjectQuery("SELECT * FROM Win32_LogicalDisk"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(wqlQuery); foreach (ManagementObject disk in searcher.Get()) { Console.WriteLine(disk.ToString()); } Console.ReadLine(); return 0; } }