ライセンス制度ならではの何かを使いたい。 Win32_ProcessorManagementクラスのProcessorIDを使用することにしました。
同じプロセッサタイプの2つの異なるシステムで試してみました。
両方のシステムで同じprocessorIDが表示されます。私はこのコードを使用しています
public static String GetCPUId()
{
String processorID = "";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(
"Select * FROM WIN32_Processor");
ManagementObjectCollection mObject = searcher.Get();
foreach (ManagementObject obj in mObject)
{
processorID = obj["ProcessorId"].ToString();
}
return processorID;
}
いいえ、プロセッサがCPUID命令をサポートしていない可能性があるため、一意であるとは保証できません。その場合、呼び出しの成功は保証されません。
また、マシンに複数のプロセッサが搭載されている可能性があることを無視しているため、単一のプロセッサのIDを取得しても役に立ちません。
他の人が示しているように、システムの一意のIDを取得する場合、最善の策は、システム上のさまざまなコンポーネントIDのアマルガムであるIDを作成することです。
ハードウェアのさまざまな値のハッシュ(およびすべてではなく、非常に衝突が少ないもの)可能性があるで十分です。プロセッサやマザーボードの情報など、システムにかなり組み込まれているものを使用したいと思うかもしれませんが、USBドライブ/ハブなどのように簡単に取り外し/変更できるものは使用しないでください。
ほとんどのライセンスシステムは、フィンガープリントを作成するために複数のハードウェアコンポーネントに依存しています。単一のコンポーネントが唯一の一意のキーとして使用されることはありません。したがって、次のことを考慮に入れることができます。
全体として組み合わせると、マシンの独自の表現が得られます。ユーザーが自分のマシン上で何かを変更したときのコースの危険性が来ます。彼らはライセンスを失いますか?彼らはあなたに連絡する必要がありますか?
また、WMIクラスでは、探している種類の情報を読み取るために管理者権限が必要になることがよくあります。これは、VistaおよびWindows7ユーザーにとって非常に面倒です。
ハードウェアロックを正しく行うことは非常に困難です。したがって、1。実行しないか、2。すでにこれを実行している商用ライブラリを購入することをお勧めします。
ProcessorIDまたはCPUIDは、プロセッサのモデルと機能セットを識別するためのものです( [〜#〜] arm [〜#〜] 、 x86/x64 )。
Pentium IIIは、プロセッサシリアル番号(PSN)をサポートしていました。 Pentium III(およびTransmetaのEfficeonおよびCrusoeプロセッサ)でのみサポートされることに加えて 、 BIOSで機能を有効にする必要があり、プライバシーの懸念が生じました 。
つまり、ProcessorIDはすべてのコンピューターで一意というわけではありません。さらに、(多くの組織が同じモデルの複数のコンピューターを購入しているため)社内のコンピューター間で一意ではない可能性が非常に高くなります。
探している一意の文字列には、MACアドレスを使用します。ユーザーが MACアドレス を持っていない場合は、単に複数のインストールを許可します。それは私たちが達成したかったすべてであるほとんどの場合をカバーします。