2010-04-27 11 views
9

Estoy a punto de implementar una función de licencia muy básica para mi aplicación. Se puede otorgar un número de serie por máquina (o por sistema operativo) o por usuario (como para CAL en Windows Server: si mi aplicación es utilizada por varios usuarios en una máquina o si es utilizada por un usuario en varias máquinas).Licencia .NET aplicación por máquina/por usuario licencia

  1. Para licencia por sistema operativo, utilizo SerialNumber de Win32_OperatingSystem.

  2. Para la concesión de licencias por usuario, que utilizo:

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

Un hash de un número de serie OS obtenido o SID es entonces almacenada en la base de datos, asociado con serial aplicación; cada vez que se inicia el programa, consulta al servidor, enviando el hash del sistema operativo SN/SID y la serie de la aplicación.

¿Es correcto hacerlo o está completamente equivocado? ¿Funcionará en todas las máquinas de Windows? (Por ejemplo, using motherboard serial is wrong)

+0

Me parece bien, he estado usando hashes de identificadores de hardware a través de WMI para uno de los proyectos en el trabajo. Recuerde no asumir el formato de ninguna de las identificaciones de hardware. He visto errores causados ​​por el código escrito para suponer que las cadenas devueltas no devuelven espacios ni nada. – anonymous

+0

Bueno, viendo el número de visitas y el hecho de que no hay otras respuestas, concluyo que mi enfoque no es totalmente incorrecto. @Mr Roys, tal vez usted puede promover su comentario a una respuesta, por lo que podría aceptarlo? –

+0

También le recomendamos echar un vistazo al escenario cuando se usa un entorno virtual. ¿Rendiría todavía un sistema operativo único s/n? Sé que esta no es una respuesta ... pero no pude agregar un comentario aquí .. –

Respuesta

2

No veo nada de malo en su enfoque, ya que he visto un enfoque similar en el trabajo; sin embargo, utilizamos una combinación de S/N de SO y ID de hardware para licencias de máquinas . Nuestras aplicaciones no tienen una licencia por usuario, por lo que realmente no puedo aconsejar sobre eso.

tenga en cuenta que no se debe asumir que los valores devueltos por WMI están en cualquier formato particular (Win32_OperatingSystem debería estar bien, los ID de hardware no son siempre bien)

que he encontrado errores en el código la aceptación de identificadores de hardware asumió un formato específico y no tuvo en cuenta la presencia de caracteres no alfanuméricos, como comas y espacios.