.net core Web アプリケーションが CPU シリアル番号を取得する

.net WebアプリケーションがCPUのシリアル番号を取得する

問題の説明

最近、.Net Core 5.0 Web アプリケーションで現在のサーバーの CPU シリアル番号を取得する必要があることに遭遇しました。私のオペレーティングシステムはWindowsです。
インターネット上の .net で CPU のシリアル番号を取得する方法を参照すると、次のような [System.Management] を使用する方法がほとんどです。
画像-20230505160342132

プログラムが実行されるとエラーが発生します。

System.Management は現在、Windows デスクトップ アプリケーションでのみサポートされています

[System.Management] ライブラリは、WPF や Windows フォーム アプリケーションなどの Windows デスクトップ アプリケーションのみをサポートしているようです。.Net Web プログラムはサポートされなくなりました。別の解決策を見つける必要があります。

解決

解決策は、cmd コンソールを呼び出して CPU 情報を取得することです。

cmd コンソールに次のコマンド ラインを入力して、CPU シリアル番号を取得します。

wmic CPU get ProcessorID

画像-20230505161329943

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;
        }

おすすめ

転載: blog.csdn.net/guigenyi/article/details/130509607