首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 取得 CPU 序號、硬碟 ID、網卡 MAC 位址

     編輯:關於C語言

前言

在軟體授權、資產管理或硬體綁定場景中,常需要讀取電腦的唯一硬體識別碼。C# 透過 System.Management 命名空間的 WMI(Windows Management Instrumentation)查詢,可輕鬆取得 CPU 處理器 ID、硬碟型號/序號、網卡 MAC 位址等資訊。本文提供完整可用的程式碼範例。

必要參考

專案需加入 System.Management.dll 參考,並引用命名空間:

using System.Management;

取得 CPU 序號

public string GetCpuId()
{
    string cpuId = string.Empty;
    using (var searcher = new ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor"))
    {
        foreach (ManagementObject obj in searcher.Get())
        {
            cpuId = obj["ProcessorId"]?.ToString() ?? string.Empty;
            break; // 通常只取第一顆實體 CPU
        }
    }
    return cpuId;
}

取得硬碟 ID(型號/序號)

public string GetDiskId()
{
    string diskId = string.Empty;
    using (var searcher = new ManagementObjectSearcher("SELECT Model, SerialNumber FROM Win32_DiskDrive"))
    {
        foreach (ManagementObject obj in searcher.Get())
        {
            // 組合型號與序號作為唯一識別
            string model = obj["Model"]?.ToString()?.Trim() ?? string.Empty;
            string serial = obj["SerialNumber"]?.ToString()?.Trim() ?? string.Empty;
            diskId = $"{model}_{serial}";
            break; // 取第一顆實體硬碟
        }
    }
    return diskId;
}

取得網卡 MAC 位址

public string GetMacAddress()
{
    string mac = string.Empty;
    using (var searcher = new ManagementObjectSearcher("SELECT MACAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE"))
    {
        foreach (ManagementObject obj in searcher.Get())
        {
            mac = obj["MACAddress"]?.ToString()?.Replace(":", "") ?? string.Empty;
            if (!string.IsNullOrEmpty(mac))
                break; // 取第一張啟用 IP 的網卡
        }
    }
    return mac;
}

整合範例

public void DisplayHardwareInfo()
{
    Console.WriteLine($"CPU ID: {GetCpuId()}");
    Console.WriteLine($"Disk ID: {GetDiskId()}");
    Console.WriteLine($"MAC Address: {GetMacAddress()}");
}

注意事項

  • 權限:應用程式需以管理員權限執行,否則部分 WMI 查詢可能回傳空值或拒絕存取。
  • 效能:WMI 查詢相對緩慢,建議在應用程式啟動時一次性讀取並快取,避免重複查詢。
  • 虛擬機器:在虛擬環境中,硬體 ID 可能非唯一或會隨遷移改變,授權機制需考量此情況。
  • 多網卡/多硬碟:實際部署時應根據業務邏輯決定採用哪一組硬體資訊(如第一張實體網卡、系統碟等)。

結語

透過 System.Management 與 WMI 查詢,C# 可輕鬆存取底層硬體識別資訊。本文提供的方法可直接整合至授權驗證、資產掃描等系統中,並建議搭配快取與權限處理以提升穩定度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved