2009-08-20 17 views
6

jaki rodzaj "unikatowych" identyfikatorów systemowych można łatwo uzyskać za pomocą C# (do skrótu, a następnie jednoznacznie zidentyfikować system)? Mogę po prostu zmniejszyć rozmiar HDD i takie rzeczy, ale muszę zidentyfikować i rozróżnić komputery, które są zbudowane przez te same komponenty, więc nie mogę tego zrobić.Uzyskaj unikalne identyfikatory systemu w języku C#

Doceń porady, pomysły, przykładowy kod!

+0

Byłbym ostrożny, aby nie zniechęcać klientów. Powinny mieć możliwość zmiany kart sieciowych, dysków twardych i rozmiaru pamięci bez informowania o tym. –

+4

Och, to wymaganie faktycznie przychodzi * od * klienta :) – Alex

Odpowiedz

8

Oto dobry początek z 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 
} 

można zrobić z wielu kawałków sprzęt i wymyślić rozwiązanie.

+0

Próbowałem tego ... ale widzę, że są to dni, w których żaden z seryjnych nosków nie jest utrzymywany. Płyta główna, procesor ... MAC zmienia się poprzez zmianę karty sieciowej ... co wybrać? – Rick2047

+0

Ponieważ numer seryjny Win32_BaseBoard nie zwraca już wartości w większości przypadków, najlepiej jest podać wartość ProcessorID w Win32_Processor – CJxD

+0

Należy zauważyć, że wartość ProcessorID jest równa dla wszystkich procesorów tego samego typu. Jeśli przetestujesz dwa procesory i7-FooBar, oba będą miały ten sam identyfikator. – ANeves

2

Możesz użyć WMI z C#, aby uzyskać sporo informacji o sprzęcie.

Identyfikatory dysków twardych i adres MAC sieci Ethernet są dwoma często używanymi unikalnymi identyfikatorami używanymi w schematach identyfikacji systemu. Adres MAC jest teoretycznie unikalny na kartę sieciową.

+1

Teoretycznie, ale w praktyce nie ma jednego unikalnego identyfikatora, który mógłby być użyty, biorąc pod uwagę, że są tony i łatwo dostępne, najlepiej złapać dwa lub trzy i połącz je, aby utworzyć unikalny ciąg (lub hash). –

+0

Tak, zgadzam się. Właśnie dlatego "w teorii" :) –

8

Możesz używać przestrzeni nazw System.Management, aby uzyskać wszystkie informacje związane ze sprzętem, identyfikatorem procesora, adresami MAC i dużo więcej informacji, które można następnie połączyć.

Spójrz na ten artykuł:

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

+0

Aby rozwinąć nieco tę i inne odpowiedzi: Adres MAC karty sieciowej będzie niepowtarzalny, nawet jeśli wszystkie urządzenia korzystają z tych samych komponentów. Zacznę od tego. Po drugie, powinieneś być w stanie uzyskać numery seryjne płyty głównej i procesora, jak powiedział JP. Te, plus adres MAC fizycznych kart sieciowych, powinny być łatwe do jednoznacznego zidentyfikowania komputera. Należy pamiętać, że wszystkie te elementy mogą ulec zmianie w przypadku wymiany części. –

+0

Adres MAC karty sieciowej można ustawić za pomocą oprogramowania, więc nie można liczyć na jej unikatowość. Z drugiej strony, myślę, że główny dysk + mac address + processorId + płyta główna może być bezpiecznym zakładem. –

2

Zakładając mówisz Windows, a następnie każda instalacja Windows ma identyfikator unikalny produkt (który można zobaczyć podczas przeglądania właściwości Mój komputer) . Myślę, że jest to przechowywane w HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion:ProductId(REG_SZ). Rozumiem, że chcesz czegoś więcej?

+0

To wygląda kool. – Rick2047

0

Można zajrzeć do korzystania GUID's

+2

+1 Implementacja identyfikatorów GUID firmy Microsoft wykorzystuje adres MAC i bieżącą godzinę, więc są one w dużym stopniu pewnym sposobem tworzenia identyfikatorów, które będą unikatowe dla każdego komputera. –

2

karty sieciowej MAC adres:

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

podczas gdy jest to dobry pomysł, i rzecz, że to się nie powiedzie, jeśli system nie ma karty NIC! – Smith

+1

To nie jest dobry pomysł, ponieważ Ten identyfikator zmienia się, gdy użytkownik wyłącza połączenie lub oprogramowanie instaluje połączenie wirtualne. –

Powiązane problemy