使用C#可以轻松获得哪种“唯一”系统标识符(用于散列然后唯一标识系统)?我可以只是哈希硬盘大小和类似的东西,但我需要识别和区分所有由相同组件构建的计算机,所以我不能去那。
欣赏提示,想法,示例代码!
答案 0 :(得分:9)
这是WMI ...
的良好开端// Win32_CPU will work too
var search = new ManagementObjectSearcher( "SELECT * FROM Win32_baseboard" );
var mobos = search.Get();
foreach (var m in mobos)
{
var serial = m["SerialNumber"]; // ProcessorID if you use Win32_CPU
}
您可以使用许多硬件来实现这一点并提出解决方案。
答案 1 :(得分:8)
您可以使用System.Management命名空间来获取与硬件,ProcessorId,MAC地址以及更多信息相关的所有内容,然后您可以将它们一起散列。
看一下这篇文章:
http://www.codeproject.com/KB/system/GetHardwareInformation.aspx
答案 2 :(得分:3)
假设您在谈论Windows,那么每个Windows安装都有一个唯一的产品ID(当您查看“我的电脑”的属性时可以看到)。我认为这存储在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion:ProductId(REG_SZ)
中。我认为你想要更多吗?
答案 3 :(得分:2)
您可以将WMI与C#一起使用,以获取有关硬件的大量信息。
硬盘ID和以太网MAC地址是系统识别方案中使用的两种常见唯一标识符。理论上,MAC地址是每个网卡唯一的。
答案 4 :(得分:2)
网卡MAC地址:
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
// probably need to do some filtering on ni.NetworkInterfaceType here
Console.WriteLine(ni.GetPhysicalAddress());
}
答案 5 :(得分:1)
您可以查看使用GUID's
对于那些不知道的人,GUID(发音为goo'id - 全球唯一标识符)是一个128位整数,可用于唯一标识某些内容。您可以在数据库中存储用户或产品,并且您希望以某种方式唯一地标识数据库中的每一行。一种常见的方法是创建自动增量整数,另一种方法是为您的产品创建GUID。
可以在System命名空间中找到GUID方法。 GUID方法System.Guid.NewGuid()初始化GUID类的新实例。
对于那些希望以特定方式格式化GUID的人,还有一些重载可用。
以下实时示例将输出生成的GUID,源代码也在下面。
Response.Write(@"<br>System.Guid.NewGuid().ToString() = " + System.Guid.NewGuid().ToString());
Response.Write(@"<br>System.Guid.NewGuid().ToString(""N"") = " + System.Guid.NewGuid().ToString("N"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""D"") = " + System.Guid.NewGuid().ToString("D"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""B"") = " + System.Guid.NewGuid().ToString("B"));
Response.Write(@"<br>System.Guid.NewGuid().ToString(""P"") = " + System.Guid.NewGuid().ToString("P"));