我需要获取任何信息以识别机器,到目前为止我使用的是以下内容:
internal static string GetProcessorId()
{
try
{
StringBuilder sb = new StringBuilder();
using (System.Management.ManagementClass theClass = new System.Management.ManagementClass("Win32_Processor"))
{
using (System.Management.ManagementObjectCollection theCollectionOfResults = theClass.GetInstances())
{
foreach (System.Management.ManagementObject currentResult in theCollectionOfResults)
{
sb.Append(currentResult["ProcessorID"].ToString());
}
}
}
return sb.ToString();
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
return "";
}
}
但是当我在Windows XP(从虚拟机)上运行时,我的currentResult["ProcessorID"]
为null
。我不确定是不是因为我使用的是虚拟机,但可能是因为它是XP。无论如何,我不太相信这段代码。它足够安全吗?我应该以其他方式获得计算机ID吗?这是我正在开发的许可系统的所有部分。
答案 0 :(得分:6)
对于我编写的小工具(Windows Forms .NET 2.0),我需要类似的东西。
我写了一个helper class,只是通过GetVolumeInformation
函数的PInvoke使用一些常见信息,如硬盘序列号。
这绝不是真正安全或防弹,而是准确到足以满足我的需要。
(如果您有兴趣this是工具,如果我被允许链接到)
答案 1 :(得分:3)
即使它奏效了,也不会做你想要的。 ProcessorID为您提供过程产品(具有Y和Z特征的Pentium X)的标识,而不是CPU的特定实例。因此描述如下:
描述的处理器信息 处理器功能。对于x86 类CPU,字段格式取决于 处理器支持CPUID 指令。如果指令是 支持,属性包含2 (二)DWORD格式化的值。该 首先是08h-0Bh的偏移,其中 是CPUID的EAX值 指令返回输入EAX设置 到1.第二个是偏移量 0Ch-0Fh,这是EDX值 指令返回。只有 属性的前两个字节是 重要且包含内容 在CPU复位时的DX寄存器全部 其他设置为0(零),和 内容采用DWORD格式。
IBM PC硬件没有任何防伪标识。