什么是一个好的独特PC标识符?

52
我正在查看这个教程中的代码,发现它使用My.Computer.Name保存不应该在计算机之间漫游的设置。然而,用户很可能会有两台同名的PC。例如,如果他们想在每台PC上使用相同的用户名,他们很可能最终会得到两台名为“用户名-PC”的PC。
有什么好的方法来识别不同的PC吗?PC是否与GUID相关联,或者我应该尝试从某些硬件上获取序列号?我不在乎标识是否会持续到重新安装Windows。
(我链接的教程是VB.Net的,但我正在用C#实现它)

https://dev59.com/B3RB5IYBdhLWcg3wSVcI - sancho.s ReinstateMonicaCellio
https://dev59.com/Z3VD5IYBdhLWcg3wE3Ro - sancho.s ReinstateMonicaCellio
13个回答

0

Steven,这些特定的值是硬件相关的。 - JonH
1
硬件更改。光驱,CPU等等。当它坏了,就会被替换掉。 - Steven Sudit

0
每台计算机在正常情况下都有一个唯一的SID。

3
为什么这是被接受的答案?什么是SID以及如何获取它? 为什么这个回答被接受了?SID是什么,如何获得它? - Marek
3
甚至不正确。 请从此答案中删除标记。SID(安全标识符)是在安装Windows时生成的标识符。两台计算机具有相同SID的可能性非常小。SID最初的设计目的是在网络中唯一标识用户。为什么这样做还不够好?因为如果计算机不是从头开始安装的,而是从图像安装的,那么它将具有原始计算机的相同SID。在大型网络中使用此安装计算机的方法非常普遍,因此,在实践中,SID是一个糟糕的选择。 - Dig
@DiGMi,你说的克隆会导致相同的SID是正确的。这就是为什么我说“在正常情况下”。正如你在回复中提到的那样,一些安装克隆映像的公司确实会重新生成SID。 - Steven Sudit
问题在于没有普遍正确的答案,只有根据情况更好或更差的答案。听起来像是OP更关心避免错误匹配而不是错误不匹配,在这种情况下,CPU或HD ID会最有效。 - Steven Sudit

-1

这个链接中有一个带有完整注释的示例代码,用于获取CPU和硬盘驱动器ID:http://www.vcskicks.com/hardware_id.php

将此DLL添加到引用中

 System.Management.dll

针对 CPU ID:

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

foreach (ManagementObject mo in moc)
{
     if (cpuInfo == "")
     {
          //Get only the first CPU's ID
          cpuInfo = mo.Properties["processorID"].Value.ToString();
          break;
     }
}
return cpuInfo;

而对于硬盘ID(卷序列号):

ManagementObject dsk = new ManagementObject(@"win32_logicaldisk.deviceid=""" + drive + @":""");
dsk.Get();
string volumeSerial = dsk["VolumeSerialNumber"].ToString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接