System.Management 是一个用于访问和管理 Windows 系统信息的命名空间,基于 Windows Management Instrumentation (WMI) 提供了丰富的管理功能。
安装或引用
.NET Framework 项目
在项目中选择“引用”(Reference)->“程序集”(Assemblies),勾选“System.Management”。
.NET Core/.NET 5+ 项目
对于 .NET 6.0 或更高版本,System.Management 命名空间已被移除,可以通过 NuGet 安装 System.Management 包:
dotnet add package System.Management
常用 WMI 类
- o Win32_OperatingSystem: 获取操作系统信息
- o Win32_Processor: 获取 CPU 信息
- o Win32_DiskDrive: 获取磁盘驱动器信息
- o Win32_Service: 获取系统服务信息
- o Win32_Process: 获取进程信息
- o Win32_NetworkAdapter: 获取网络适配器信息
- o Win32_LogicalDisk: 获取逻辑磁盘(如 C: 盘)信息
示例
示例展示了如何查询系统信息:
using System;
using System.Management;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("=== 系统信息查询 ===");
// 查询操作系统信息
QueryOperatingSystem();
// 查询 CPU 信息
QueryProcessor();
// 查询内存信息
QueryMemory();
// 查询磁盘信息
QueryLogicalDisk();
// 查询进程信息
QueryProcesses();
Console.WriteLine("=== 查询结束 ===");
Console.ReadLine();
}
///
/// 查询操作系统信息
///
static void QueryOperatingSystem()
{
Console.WriteLine("\n=== 操作系统信息 ===");
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem"))
{
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine($"操作系统: {obj["Caption"]}");
Console.WriteLine($"版本: {obj["Version"]}");
Console.WriteLine($"安装日期: {Convert.ToDateTime(obj["InstallDate"])}");
Console.WriteLine($"最后启动时间: {Convert.ToDateTime(obj["LastBootUpTime"])}");
}
}
}
///
/// 查询 CPU 信息
///
static void QueryProcessor()
{
Console.WriteLine("\n=== CPU 信息 ===");
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor"))
{
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine($"CPU: {obj["Name"]}");
Console.WriteLine($"核心数: {obj["NumberOfCores"]}");
Console.WriteLine($"主频: {obj["MaxClockSpeed"]} MHz");
}
}
}
///
/// 查询内存信息
///
static void QueryMemory()
{
Console.WriteLine("\n=== 内存信息 ===");
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"))
{
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine($"总物理内存: {Convert.ToUInt64(obj["TotalPhysicalMemory"]) / (1024 * 1024 * 1024)} GB");
}
}
}
///
/// 查询磁盘信息
///
static void QueryLogicalDisk()
{
Console.WriteLine("\n=== 磁盘信息 ===");
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk WHERE DriveType=3")) // DriveType=3 表示本地磁盘
{
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine($"盘符: {obj["DeviceID"]}");
Console.WriteLine($"总大小: {Convert.ToUInt64(obj["Size"]) / (1024 * 1024 * 1024)} GB");
Console.WriteLine($"剩余空间: {Convert.ToUInt64(obj["FreeSpace"]) / (1024 * 1024 * 1024)} GB");
Console.WriteLine($"文件系统: {obj["FileSystem"]}");
}
}
}
///
/// 查询进程信息
///
static void QueryProcesses()
{
Console.WriteLine("\n=== 进程信息 ===");
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Process"))
{
foreach (ManagementObject obj in searcher.Get())
{
Console.WriteLine($"进程名: {obj["Name"]}");
Console.WriteLine($"进程ID: {obj["ProcessId"]}");
if (obj["ExecutablePath"] != null)
Console.WriteLine($"路径: {obj["ExecutablePath"]}");
Console.WriteLine("---");
}
}
}
}
输出示例
=== 系统信息查询 ===
=== 操作系统信息 ===
操作系统: Microsoft Windows 11 专业版
版本: 10.0.26100
安装日期: 2025/1/16 17:44:24
最后启动时间: 2025/2/2 12:27:07
=== CPU 信息 ===
CPU: 13th Gen Intel(R) Core(TM) i5-13400
核心数: 10
主频: 2500 MHz
=== 内存信息 ===
总物理内存: 15 GB
=== 磁盘信息 ===
盘符: C:
总大小: 199 GB
剩余空间: 29 GB
文件系统: NTFS
盘符: D:
总大小: 731 GB
剩余空间: 321 GB
文件系统: NTFS
=== 进程信息 ===
进程名: System Idle Process
进程ID: 0
---
进程名: System
进程ID: 4
---
...
注意事项
- o 使用 System.Management 需要管理员权限,某些操作可能需要提升权限。
- o WMI 查询可能会比较耗时,建议在后台线程中执行。
- o 对于高频率查询,考虑缓存结果以提高性能。
- o System.PlatformNotSupportedException:“System.Management currently is only supported for Windows desktop applications.” :可以将目标框架设置为 net8.0-windows