2009-08-20 19 views
6

Ne tür bir 'benzersiz' sistem tanımlayıcıları C# (karma ve daha sonra bir sistemi benzersiz olarak tanımlamak) kullanarak kolayca elde edilebilir? Sadece HDD boyutuna ve benzeri şeylere sahip olabilirdim, ancak aynı bileşenler tarafından üretilen bilgisayarları tanımlamam ve ayırt etmem gerekiyor ki ben de buna katlanamıyorum.C# ile benzersiz sistem tanımlayıcıları alın #

Tavsiyeleri, fikirleri ve örnek kodları takdir edin!

+0

Müşterilerinizin sizden nefret etmesini engellememenize dikkat etmeliyim. Ağ kartlarını, sabit diskleri ve bellek boyutunu size bildirmeden değiştirebilmeli. –

+4

Oh, bu zorunluluk aslında * dan * müşteri * geliyor – Alex

cevap

8

Burada WMI ile iyi bir başlangıç ​​...

// 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 
} 

Sen bunu yapabilir birçok taşlarla donanım ve bir çözüm ile gelir.

+0

Bunu denedim ... ama bunların günlerin hiçbiri sürdürülmediğini görüyorum. Mother Board, Processor ... NIC değiştirilerek MAC değiştiriliyor ... Ne seçmeli? – Rick2047

+0

Win32_BaseBoard SerialNumber çoğu durumda artık bir değer döndürmediğinden, en iyi seçiminiz Win32_Processor – CJxD

+0

içinde ProcessorID'dir. ProcessorID'nin aynı türdeki tüm işlemciler için eşit olduğunu unutmayın. İki i7-FooBar işlemcisini test ederseniz, her ikisi de aynı kimliğe sahip olacaktır. – ANeves

2

Donanım hakkında oldukça fazla bilgi edinmek için C# ile WMI kullanabilirsiniz.

Sabit Disk Kimlikleri ve Ethernet MAC Adresi, sistem tanımlama şemalarında kullanılan iki ortak benzersiz tanımlayıcıdır. MAC Adresi, teoride, ağ kartı başına benzersizdir.

+1

Teoride, ama pratikte, tek ve benzersiz bir kimlik yoktur, çünkü orada ton var ve kolayca erişilebilir, iki veya üç kapmak için en iyi ve Eşsiz bir dize (veya karma) oluşturmak için bunları birleştirin –

+0

Evet, katılıyorum. İşte bu yüzden "teoride" :) –

8

System.Management ad alanını, donanım, ProcessorId, MAC adresleri ve daha sonra karma bir şekilde yapabileceğiniz çok daha fazla bilgi almak için kullanabilirsiniz.

bu makalede bir göz atın: Teşekkür varsayarsak

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

+0

Bu ve diğer cevaplarda biraz daha genişletmek için: Makinelerin hepsi aynı bileşenleri kullanıyor olsa bile ağ kartlarının MAC adresi benzersiz olacaktır. Bununla başlarım. Her şeyden önce, JP'nin dediği gibi, anakart ve CPU seri numaraları alabilmeniz gerekir. Bunlar, ayrıca fiziksel NIC'lerin MAC adresi, bir makineyi benzersiz şekilde tanımlamak için yeterince kolay olmalıdır. Sadece parçaların değiştirilmesi durumunda bunların hepsinin değişebileceğinin farkında olun. –

+0

Bir ağ kartının MAC adresi yazılım tarafından ayarlanabilir, böylece benzersiz olmalarına güvenebilirsiniz. Öte yandan, ana disk + mac adresi + processorId + anakartın güvenli bir bahis olabileceğini düşünüyorum. –

2

Windows'un bahsediyoruz, o zaman her Windows yükleme (My Computer özelliklerini görüntülediğinizde görebilir) benzersiz bir ürün kimliği vardır . Bunun HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion:ProductId(REG_SZ)'da saklandığını düşünüyorum. Bundan daha fazlasını ister misin?

+0

Bu kool görünüyor. – Rick2047

0

Sen GUID's

+2

+1 GUID'lerin Microsoft uygulaması MAC adresini ve geçerli saati kullanır; bu nedenle, bilgisayar başına benzersiz olacak tanımlayıcılar oluşturma konusunda oldukça fazla bir yol vardır. –

2

Ağ kartı MAC adresini kullanarak içine görünebilir:

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

bu iyi bir fikir iken, sistemin NIC'si yoksa başarısız olurum! – Smith

+1

Bu iyi bir fikir değil, Çünkü Kullanıcı bir bağlantıyı devre dışı bıraktığında veya bir yazılım sanal bir bağlantı kurduğunda bu kimlik değişiyor –

İlgili konular