如何使用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
相关产品推荐
相关产品推荐

