2010-04-27 3 views
9

내 응용 프로그램에 대한 매우 기본적인 라이센스 기능을 구현하려고합니다. 일련 번호는 컴퓨터마다 (또는 운영 체제 별) 또는 사용자별로 부여 될 수 있습니다 (Windows Server의 CAL의 경우 : 한 대의 컴퓨터에서 여러 명의 사용자가 응용 프로그램을 사용하거나 여러 대의 컴퓨터에서 한 명의 사용자가 사용하는 경우). 기계).컴퓨터 당/응용 프로그램 당 라이센스 당 .NET 응용 프로그램

  1. 는 당 운영 체제 라이선스를 들어, 나는 의 serialNumber Win32_OperatingSystem를 사용합니다.

  2. 사용자 별 라이센싱, I가 사용

    WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent(); 
    if (currentIdentity != null) 
    { 
        SecurityIdentifier userSid = currentIdentity.User.AccountDomainSid; 
        Console.WriteLine(userSid); 
    } 
    

얻어진 OS 시리얼 번호 해시 또는 SID 다음 애플리케이션 직렬로 연결된 데이터베이스에 저장된다; 프로그램이 시작될 때마다 OS SN/SID 및 응용 프로그램 일련의 해시를 보내 서버를 쿼리합니다.

옳은 일입니까, 아니면 완전히 잘못 되었습니까? 모든 Windows 컴퓨터에서 작동합니까? (예 : using motherboard serial is wrong)

+0

소리 나에게 잘 됐어, 직장에서 프로젝트 중 하나에 대해 WMI를 통해 하드웨어 ID의 해시를 사용 해왔다. 하드웨어 ID의 형식을 추측하지 말 것을 잊지 마십시오. 반환 된 문자열이 공백을 반환하지 않는다고 가정하여 작성된 코드 때문에 발생하는 버그를 보았습니다. – anonymous

+0

글쎄, 조회수와 다른 응답이 없다는 사실을보고, 나는 나의 접근 방식이 완전히 잘못이 아니라고 결론 내린다. @ MrRyys, 아마도 당신은 대답에 대한 귀하의 의견을 홍보 할 수 있으므로 받아 들일 수 있을까요? –

+0

가상 환경이 사용될 때 시나리오를 살펴볼 수도 있습니다. 여전히 고유 한 OS s/n을 산출합니까? 나는 이것이 대답이 아니라는 것을 안다. 그러나 여기에 덧글을 추가 할 수 없었다. .. –

답변

2

비슷한 접근법이 사용되어 왔기 때문에 접근 방식에는 아무런 문제가 없습니다.하지만 OS 라이센스와 하드웨어 ID를 조합하여 사용합니다. . 우리의 앱에는 사용자 별 라이센스가 없으므로 그 점에 대해서는 정말로 조언 할 수 없습니다.

내가 버그가 발생했습니다

곳 코드 (하드웨어 ID를 항상 확인하지 하여 Win32_OperatingSystem 확인해야한다) 당신이 WMI에 의해 반환 된 값은 특정 형식으로되어 있다고 가정하지 않도록주의 함 하드웨어 ID를 수락하는 것은 특정 형식을 취하고 쉼표 및 공백과 같은 영숫자가 아닌 문자를 고려하지 않았습니다.

관련 문제