2009-08-20 18 views
6

¿Qué tipo de identificadores de sistema "únicos" se pueden obtener fácilmente usando C# (para calcular y luego identificar de forma única un sistema)? Podría simplemente modificar el tamaño de HDD y cosas así, pero necesito identificar y distinguir las computadoras que están construidas con los mismos componentes, así que no puedo seguir así.Obtenga identificadores de sistema únicos en C#

¡Apreciar sugerencias, ideas, código de muestra!

+0

Sería cuidadoso con esto, para que no haga que sus clientes lo odien. Deben poder cambiar las tarjetas de red, los discos duros y el tamaño de la memoria sin decírtelo. –

+4

Oh, este requisito realmente viene * de * el cliente :) – Alex

Respuesta

8

He aquí un buen comienzo con 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 
} 

Usted puede hacer eso con muchas piezas de hardware y proponer una solución.

+0

Lo intenté ... pero veo que estos son días en que ninguno de los números seriales se mantienen. Mother Board, Processor ... MAC se está cambiando al cambiar NIC ... ¿qué elegir? – Rick2047

+0

Como Win32_BaseBoard SerialNumber ya no devuelve un valor en la mayoría de los casos, su mejor opción es ProcessorID en Win32_Processor – CJxD

+0

Tenga en cuenta que ProcessorID es igual para todos los procesadores del mismo tipo. Si prueba dos procesadores i7-FooBar, ambos tendrán la misma ID. – ANeves

2

Puede usar WMI con C# para obtener bastante información sobre el hardware.

Las ID de disco duro y la dirección MAC de Ethernet son dos identificadores únicos comunes utilizados en los esquemas de identificación de sistemas. La dirección MAC es, en teoría, única por tarjeta de red.

+1

En teoría, pero en la práctica no hay una única identificación única que se pueda usar, dado que hay toneladas y de fácil acceso, lo mejor es tomar dos o tres y Combínelos para crear una cadena única (o hash) –

+0

Sí, estoy de acuerdo. Es por eso que "en teoría" :) –

8

Puede usar el espacio de nombre System.Management para obtener todo lo relacionado con el hardware, ProcessorId, direcciones MAC y mucha más información que luego puede reunir juntos.

Tome un vistazo a este artículo:

http://www.codeproject.com/KB/system/GetHardwareInformation.aspx

+0

Para ampliar este y otras respuestas un poco: La dirección MAC de la (s) tarjeta (s) de red va a ser única, incluso si todas las máquinas usan los mismos componentes. Yo comenzaría con eso. En segundo lugar, debería poder obtener los números de serie de la placa base y la CPU, como dijo JP. Esos, más la dirección MAC de las NIC físicas, deberían ser lo suficientemente fáciles como para identificar de manera única una máquina. Solo tenga en cuenta que todos pueden cambiar si se reemplazan las piezas. –

+0

La dirección MAC de una tarjeta de red puede configurarse por software, por lo que no puede contar con que sea única. Por otro lado, creo que el disco principal + dirección MAC + ID de procesador + placa base podría ser una apuesta segura. –

2

que Suponiendo que están hablando acerca de Windows, a continuación, cada instalación de Windows tiene un identificador de producto único (que se puede ver al ver las propiedades de Mi PC) . Creo que esto está almacenado en HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion:ProductId(REG_SZ). Supongo que quieres más que eso?

+0

Esto parece kool. – Rick2047

0

Se podía ver en el uso GUID's

+2

+1 La implementación de GUID por parte de Microsoft usa la dirección MAC y la hora actual, por lo que son una forma bastante segura de crear identificadores que serán únicos por computadora. –

2

Tarjeta de red dirección MAC:

foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) 
{ 
    // probably need to do some filtering on ni.NetworkInterfaceType here 
    Console.WriteLine(ni.GetPhysicalAddress()); 
} 
+1

si bien esta es una buena idea, creo que fallaría si el sistema no tiene NIC. – Smith

+1

Esto no es una buena idea, porque esta identificación cambia cuando el usuario deshabilita una conexión o si un software instala una conexión virtual –

Cuestiones relacionadas