.net WebアプリケーションがCPUのシリアル番号を取得する
問題の説明
最近、.Net Core 5.0 Web アプリケーションで現在のサーバーの CPU シリアル番号を取得する必要があることに遭遇しました。私のオペレーティングシステムはWindowsです。
インターネット上の .net で CPU のシリアル番号を取得する方法を参照すると、次のような [System.Management] を使用する方法がほとんどです。
プログラムが実行されるとエラーが発生します。
System.Management は現在、Windows デスクトップ アプリケーションでのみサポートされています
[System.Management] ライブラリは、WPF や Windows フォーム アプリケーションなどの Windows デスクトップ アプリケーションのみをサポートしているようです。.Net Web プログラムはサポートされなくなりました。別の解決策を見つける必要があります。
解決
解決策は、cmd コンソールを呼び出して CPU 情報を取得することです。
cmd コンソールに次のコマンド ラインを入力して、CPU シリアル番号を取得します。
wmic CPU get ProcessorID
C# コードは次のとおりです。
private static string CMDPath = Environment.GetFolderPath(Environment.SpecialFolder.System) + "\\cmd.exe";
public static void RunCMDCommand(string Command, out string OutPut)
{
using (var pc = new System.Diagnostics.Process())
{
Command = Command.Trim().TrimEnd('&') + "&exit";
pc.StartInfo.FileName = CMDPath;
pc.StartInfo.CreateNoWindow = true;
pc.StartInfo.RedirectStandardError = true;
pc.StartInfo.RedirectStandardInput = true;
pc.StartInfo.RedirectStandardOutput = true;
pc.StartInfo.UseShellExecute = false;
pc.Start();
pc.StandardInput.WriteLine(Command);
pc.StandardInput.AutoFlush = true;
OutPut = pc.StandardOutput.ReadToEnd();
int P = OutPut.IndexOf(Command) + Command.Length;
OutPut = OutPut.Substring(P, OutPut.Length - P - 3);
pc.WaitForExit();
pc.Close();
}
}
/// <summary>
/// 获取cpu序列号
/// </summary>
/// <returns></returns>
public static string GetCpuId()
{
RunCMDCommand("wmic CPU get ProcessorID", out string processId);
//市面上的电脑一般只安装一块CPU,我们直接取值即可
processId = processId.Replace("ProcessorId", "").Replace("\n", "").Trim();
return processId;
}