透過 WMI (Windows Management Instrumentation) 查詢 Win32_Processor 類別的 ProcessorId 屬性,可取得 CPU 唯一識別碼,常用於軟體授權綁定、硬體資產管理。本文提供完整查詢程式碼、多核心處理與權限說明。
using System;
using System.Management; // 需參考 System.Management.dll
public static class CpuInfo
{
public static string GetProcessorId()
{
try
{
using (var searcher = new ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor"))
{
foreach (ManagementObject obj in searcher.Get())
{
return obj["ProcessorId"]?.ToString().Trim() ?? "";
}
}
}
catch (ManagementException ex)
{
Console.WriteLine("WMI 查詢失敗:" + ex.Message);
}
catch (System.UnauthorizedAccessException)
{
Console.WriteLine("權限不足,需管理員權限執行");
}
return "";
}
}
public static string[] GetAllProcessorIds()
{
var ids = new List();
using (var searcher = new ManagementObjectSearcher("SELECT ProcessorId, SocketDesignation, NumberOfCores, NumberOfLogicalProcessors FROM Win32_Processor"))
{
foreach (ManagementObject obj in searcher.Get())
{
string id = obj["ProcessorId"]?.ToString().Trim() ?? "";
string socket = obj["SocketDesignation"]?.ToString() ?? "";
int cores = Convert.ToInt32(obj["NumberOfCores"] ?? 0);
int logical = Convert.ToInt32(obj["NumberOfLogicalProcessors"] ?? 0);
ids.Add($"Socket:{socket} Cores:{cores} Logical:{logical} ID:{id}");
}
}
return ids.ToArray();
}
| 屬性 | 說明 |
|---|---|
ProcessorId | CPU 唯一識別碼 (製造商序號) |
Name | 完整名稱 (如 Intel(R) Core(TM) i7-9700K) |
Manufacturer | 製造商 |
MaxClockSpeed | 最大時脈 (MHz) |
NumberOfCores | 實體核心數 |
NumberOfLogicalProcessors | 邏輯處理器數 (含 Hyper-Threading) |
SocketDesignation | 插槽位置 (如 CPU 1, Socket AM4) |
L2CacheSize / L3CacheSize | 快取大小 (KB) |