C#

2009-08-20 2 views
6

의 고유 한 시스템 식별자 가져 오기 C#을 사용하여 (시스템을 해시 한 다음 고유하게 식별하는) 어떤 고유 한 시스템 식별자를 쉽게 얻을 수 있습니까? 난 그냥 HDD의 크기와 그런 것들을 해쉬 수 있지만 식별하고 내가 같은 갈 수 없어 같은 구성 요소에 의해 만들어진 모든 컴퓨터를 구별해야합니다.C#

힌트, 아이디어, 샘플 코드를 감상하십시오!

+0

저는 고객이 당신을 싫어하게 만들지 않도록주의해야합니다. 네트워크 카드, 하드 디스크 및 메모리 크기를 변경할 필요가 없습니다. –

+4

아,이 요구 사항은 실제로 고객으로부터 온 것입니다. – Alex

답변

8

여기 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 
} 

당신이 할 수 많은 조각 하드웨어를 선택하고 솔루션을 제안하십시오.

+0

나는 이것을 시도했지만 ... 나는 이것들이 직렬 번호 중 어느 것도 유지되고 있지 않음을 알 수 있습니다. 마더 보드, 프로세서 ... NIC는 NIC를 변경하여 변경됩니다 ... 선택할 무엇을? – Rick2047

+0

Win32_BaseBoard SerialNumber는 더 이상 대부분의 경우 값을 반환하지 않으므로 가장 좋은 방법은 Win32_Processor의 ProcessorID입니다. – CJxD

+0

동일한 유형의 모든 프로세서에서 ProcessorID가 동일하다는 것에 유의하십시오. 2 개의 i7-FooBar 프로세서를 테스트하면 둘 다 동일한 ID를 갖게됩니다. – ANeves

2

WMI을 C#과 함께 사용하면 하드웨어에 대한 많은 정보를 얻을 수 있습니다.

하드 디스크 ID 및 이더넷 MAC 주소는 시스템 식별 체계에 사용되는 두 가지 공통된 고유 식별자입니다. MAC 주소는 이론상 네트워크 카드마다 고유합니다.

+1

이론 상으로는 실제로 사용할 수있는 고유 한 ID가 하나도 없으며 쉽게 접근 할 수 있고 2 ~ 3 개를 잡는 것이 가장 좋습니다. 그들을 결합하여 고유 한 문자열 (또는 해시)을 만듭니다. –

+0

예, 동의합니다. 그것이 "이론적으로"인 이유입니다. –

8

System.Management 네임 스페이스를 사용하면 하드웨어, 프로세서 ID, MAC 주소 및 해시를 함께 사용할 수있는 많은 정보를 얻을 수 있습니다.

이 문서를 살펴 보자 당신을 가정하면

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

+0

이 답변과 조금 다른 답변을 조금 더 확장하십시오 : 컴퓨터가 모두 동일한 구성 요소를 사용하는 경우에도 네트워크 카드의 MAC 주소는 고유 할 것입니다. 나는 그것으로 시작할 것입니다. 두 번째로 JP에서 말한 것처럼 마더 보드 및 CPU 일련 번호를 얻을 수 있어야합니다. 물리적 NIC의 MAC 주소에 더하여 시스템을 고유하게 식별하기에 충분해야합니다. 부품을 교체하면 모든 부품이 변경 될 수 있습니다. –

+0

네트워크 카드의 MAC 주소는 소프트웨어로 설정할 수 있으므로 고유하다고 생각할 수 없습니다. 다른 한편으로는, 나는 메인 디스크 + 맥 주소 + processorId + 마더 보드가 안전한 내기라고 생각한다. –

2

윈도우 얘기는 다음 각 Windows 설치 (내 컴퓨터의 속성을 볼 때 당신이 볼 수) 고유 제품 ID를 가지고 . 나는 이것이 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion:ProductId(REG_SZ)에 저장되어 있다고 생각한다. 나는 그 이상을 원해?

+0

이것은 kool로 보입니다. – Rick2047

0

당신은 GUID's

+2

+1 Microsoft에서 구현 한 GUID는 MAC 주소와 현재 시간을 사용하므로 컴퓨터마다 고유 한 식별자를 생성하는 데 꽤 많은 방법이 있습니다. –

2

네트워크 카드 MAC 주소 사용에 볼 수 있었다 :

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

이것은 좋은 생각인데 시스템에 NIC가 없으면 실패 할 것입니다! – Smith

+1

이것은 좋은 생각이 아닙니다. 왜냐하면이 ID는 사용자가 연결을 해제하거나 소프트웨어가 가상 연결을 설치하면 바뀌기 때문에 –