You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#控制台程序实现系统信息获取?学习型开发问询

嘿,很高兴你想通过自己写C#控制台程序来学习获取系统信息——这可比直接敲CMD命令有意思多了,还能亲手摸透.NET提供的各种系统API!下面我给你整理了几个常用场景的实现方案,代码都可以直接复制到控制台项目里运行:

用C#控制台程序获取系统信息的实用方案

一、基础操作系统信息

.NET的Environment类和OperatingSystem类就能搞定大部分基础信息,不需要额外引用:

using System;

class Program
{
    static void Main()
    {
        // 操作系统版本信息
        OperatingSystem os = Environment.OSVersion;
        Console.WriteLine($"操作系统: {os.VersionString}");
        Console.WriteLine($"平台: {os.Platform}");
        
        // 机器与用户信息
        Console.WriteLine($"机器名: {Environment.MachineName}");
        Console.WriteLine($"当前用户名: {Environment.UserName}");
        Console.WriteLine($"系统目录: {Environment.SystemDirectory}");
        
        // 处理器核心数
        Console.WriteLine($"逻辑处理器数: {Environment.ProcessorCount}");
    }
}

二、CPU详细信息

要获取CPU的型号、核心数这类细节,得用到System.Management命名空间(需要先在项目里添加对它的引用,或者通过NuGet安装对应包):

using System;
using System.Management;

class Program
{
    static void Main()
    {
        ManagementObjectSearcher 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["NumberOfLogicalProcessors"]}");
            Console.WriteLine($"最大时钟频率: {obj["MaxClockSpeed"]} MHz");
            break; // 多CPU的话可以去掉break遍历所有
        }
    }
}

三、内存信息

如果你想要准确的物理内存总量和可用内存,有两种简单方案可选:

方案1:用ComputerInfo(需引用Microsoft.VisualBasic)

using System;
using Microsoft.VisualBasic.Devices;

class Program
{
    static void Main()
    {
        ComputerInfo info = new ComputerInfo();
        // 转换为GB更易读
        double totalMemory = ConvertBytesToGB(info.TotalPhysicalMemory);
        double availableMemory = ConvertBytesToGB(info.AvailablePhysicalMemory);
        
        Console.WriteLine($"总物理内存: {totalMemory:F2} GB");
        Console.WriteLine($"可用物理内存: {availableMemory:F2} GB");
    }
    
    private static double ConvertBytesToGB(long bytes)
    {
        return bytes / (1024.0 * 1024.0 * 1024.0);
    }
}

方案2:用WMI(无需额外引用VisualBasic)

using System;
using System.Management;

class Program
{
    static void Main()
    {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
        long totalMemory = 0;
        foreach (ManagementObject obj in searcher.Get())
        {
            totalMemory += Convert.ToInt64(obj["Capacity"]);
        }
        Console.WriteLine($"总物理内存: {ConvertBytesToGB(totalMemory):F2} GB");
    }
    
    private static double ConvertBytesToGB(long bytes)
    {
        return bytes / (1024.0 * 1024.0 * 1024.0);
    }
}

四、磁盘驱动器信息

用System.IO.DriveInfo类就能轻松获取磁盘的空间、类型等信息:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        DriveInfo[] drives = DriveInfo.GetDrives();
        foreach (DriveInfo drive in drives)
        {
            if (drive.IsReady)
            {
                Console.WriteLine($"驱动器: {drive.Name}");
                Console.WriteLine($"驱动器类型: {drive.DriveType}");
                Console.WriteLine($"总空间: {ConvertBytesToGB(drive.TotalSize):F2} GB");
                Console.WriteLine($"可用空间: {ConvertBytesToGB(drive.AvailableFreeSpace):F2} GB");
                Console.WriteLine("---");
            }
        }
    }
    
    private static double ConvertBytesToGB(long bytes)
    {
        return bytes / (1024.0 * 1024.0 * 1024.0);
    }
}

一些小提示

  • 部分WMI查询需要管理员权限才能获取完整信息,比如某些硬件细节,如果运行时提示权限不足,可以右键以管理员身份启动程序。
  • 如果你的项目是.NET Core/.NET 5+,System.Management需要通过NuGet搜索安装对应包。
  • 你还可以扩展这些代码,比如获取网络适配器、显卡信息,只需要修改WMI的查询语句(比如Win32_NetworkAdapter、Win32_VideoController)。

慢慢折腾这些代码,你会发现.NET对系统信息的封装其实非常强大,比CMD命令灵活多了!

内容的提问来源于stack exchange,提问作者user12813196

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:27:33