前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >System.Management 概述

System.Management 概述

作者头像
郑子铭
发布2025-03-20 15:35:37
发布2025-03-20 15:35:37
4400
代码可运行
举报
运行总次数:0
代码可运行

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 包:

代码语言:javascript
代码运行次数:0
运行
复制
dotnet add package System.Management

常用 WMI 类

  • Win32_OperatingSystem: 获取操作系统信息
  • Win32_Processor: 获取 CPU 信息
  • Win32_DiskDrive: 获取磁盘驱动器信息
  • Win32_Service: 获取系统服务信息
  • Win32_Process: 获取进程信息
  • Win32_NetworkAdapter: 获取网络适配器信息
  • Win32_LogicalDisk: 获取逻辑磁盘(如 C: 盘)信息

示例

示例展示了如何查询系统信息:

代码语言:javascript
代码运行次数:0
运行
复制
using System;
using System.Management;

classProgram
{
    static void Main(string[] args)
    {
        Console.WriteLine("=== 系统信息查询 ===");

        // 查询操作系统信息
        QueryOperatingSystem();

        // 查询 CPU 信息
        QueryProcessor();

        // 查询内存信息
        QueryMemory();

        // 查询磁盘信息
        QueryLogicalDisk();

        // 查询进程信息
        QueryProcesses();

        Console.WriteLine("=== 查询结束 ===");
        Console.ReadLine();
    }

    /// <summary>
    /// 查询操作系统信息
    /// </summary>
    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"])}");
            }
        }
    }

    /// <summary>
    /// 查询 CPU 信息
    /// </summary>
    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");
            }
        }
    }

    /// <summary>
    /// 查询内存信息
    /// </summary>
    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");
            }
        }
    }

    /// <summary>
    /// 查询磁盘信息
    /// </summary>
    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"]}");
            }
        }
    }

    /// <summary>
    /// 查询进程信息
    /// </summary>
    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("---");
            }
        }
    }
}

输出示例

代码语言:javascript
代码运行次数:0
运行
复制
=== 系统信息查询 ===
=== 操作系统信息 ===
操作系统: Microsoft Windows 11 专业版
版本: 10.0.26100
安装日期: 2025/1/16 17:44:24
最后启动时间: 2025/1/17 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
---
...

注意事项

  • • 使用 System.Management 需要管理员权限,某些操作可能需要提升权限。
  • • WMI 查询可能会比较耗时,建议在后台线程中执行。
  • • 对于高频率查询,考虑缓存结果以提高性能。
  • • System.PlatformNotSupportedException:“System.Management currently is only supported for Windows desktop applications.” :可以将目标框架设置为 net8.0-windows
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装或引用
    • .NET Framework 项目
    • .NET Core/.NET 5+ 项目
  • 常用 WMI 类
  • 示例
    • 输出示例
  • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档