mat*_*sta 43
一些好的标识符:
Sco*_*ain 19
如果您在Windows上HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProductId是唯一的每台机器/每个Windows安装.在某些其他答案中,如MAC地址,Proc SN和HD SN将在Windows重新安装/双启动情况之间保持不变.
DiG*_*GMi 11
这个问题的真正答案是:没有这样的事情.
有几个"足够接近"的解决方案,但每个解决方案都有其自身的局限性.
所有硬件ID - 硬件更改.并且,在许多情况下,您可以更改这些标识符(例如,MAC欺骗).
正如我已经评论过的那样,SID也不是那么好,因为如果从图像安装计算机,SID就不会改变.SID是由Windows安装生成的,如果未安装Windows,但是从图像复制,SID将不会更改(尽管由于关于"安全风险"的神话而重新生成它是常见的- 您无法计算在那).
计算机名称 - 如上所述,他们认为它是独一无二的,但它并没有以任何方式强制执行.
您可以实现的另一个解决方案是生成您自己的唯一标识符并将其存储在本地(假设您可以执行此类操作).同样,如果您的计算机是使用您的应用程序成像的,那么此解决方案将无效.
最适合您的解决方案取决于您要完成的任务.我有一个相当大的网络问题,在我的情况下,最好的解决方案是计算机的名称.如果你完全确定你的进程不会成像,我会使用Guid生成一个唯一的标识符,因为它可能是最安全的.
小智 9
这是一种唯一标识计算机的方法.使用System.Management获取Win32_BIOS,您可以从计算机的BIOS获取唯一值.
请参阅:Win32_BIOS类,http://msdn.microsoft.com/en-us/library/aa394077.aspx
using System.Management;
string UniqueMachineId()
{
StringBuilder builder = new StringBuilder();
String query = "SELECT * FROM Win32_BIOS";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
// This should only find one
foreach (ManagementObject item in searcher.Get())
{
Object obj = item["Manufacturer"];
builder.Append(Convert.ToString(obj));
builder.Append(':');
obj = item["SerialNumber"];
builder.Append(Convert.ToString(obj));
}
return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
使用类似的逻辑,您也可以单步执行"Win32_DiskDrive"; http://msdn.microsoft.com/en-us/library/aa394132.aspx ; 并为每个物理驱动器获取"SerialNumber".在这种情况下,
foreach (ManagementObject item in searcher.Get())
Run Code Online (Sandbox Code Playgroud)
应该找到多个项目
| 归档时间: |
|
| 查看次数: |
71852 次 |
| 最近记录: |