3

以下のコードを使用して一意の CPU ID を取得しています。これを使用して Web でさまざまなサンプルを見つけました。でも。たまたま、2 台の Asus ラップトップを所有しています。1 つはクアッド コア i5 で、もう 1 つは頑丈な i7 オクトコアで、どちらも 64 ビット マシンです。驚いたことに、どちらも同じ「一意の」CPU ID を生成します。

したがって、このコードは私にとっては機能しません。一意の CPU ID を取得する他の方法はありますか、それともここで何か間違っていますか。私が取得したいのは、作成された各 CPU に固有の数値です。

string cpuID = string.Empty;
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)
{
 if (cpuID == "")
 {
      //Remark gets only the first CPU ID
      cpuID = mo.Properties["processorID"].Value.ToString();

 }
}
return cpuID;
4

5 に答える 5

1

試す

ManagementClass managClass = new ManagementClass("win32_processor");
ManagementObjectCollection managCollec = managClass.GetInstances();

foreach (ManagementObject managObj in managCollec)
{
    cpuInfo = managObj.Properties["processorID"].Value.ToString();
    break;
}

ここでうまく動作しています...

于 2013-03-30T23:06:45.447 に答える
1

CPU の CPUID を尋ねる明確なマシン命令がありますが、これは一意の ID を返すことが保証されていないため、どの方法を使用しても、普遍的な一意の CPUID を取得することは事実上不可能です。低レベルのアセンブリ ルーチンを調査し、2 つの異なる AMD CPU で同じ ID を取得しました。

于 2013-03-31T04:32:45.393 に答える
1
    var mbs = new ManagementObjectSearcher("Select ProcessorID From Win32_processor");
    var mbsList = mbs.Get();

    foreach (ManagementObject mo in mbsList)
    {
        cpuid = mo["ProcessorID"].ToString();
        textBox1.Text=cpuid;
    }
于 2015-05-15T06:11:36.037 に答える
0

これは一意の ID を取得するための適切な方法ではないという結論に達しました。そのため、この方法の代わりに、一意の識別子を作成するためにシステムのハードウェア識別子をさらに要求する、より大きなコードを作成しました。

クローンされたハードウェアで実行した場合、またはハードウェアが変更された場合、この方法は異なる数値を生成するため、より良い方法です。多くの WMI 情報があり、ProcessorID を使用せずに独自のものを作成するために人々が探すべき場所だと思います。

于 2013-03-31T01:22:09.853 に答える