none
Crear código de una pc RRS feed

  • Pregunta

  • Hola

    Utilizo esta función para obtener ciertos datos de una PC que luego uso para activar la licencia del sistema

        Private Function CrearCodigoPC() As String
    
            Dim procesador As String = String.Empty
            Dim disco As String = String.Empty
            Dim memoriaRam As Double
            Dim resultado As Object = Nothing
    
            Dim busco As New ManagementObjectSearcher("Select * FROM Win32_Processor")
            For Each service As ManagementObject In busco.Get()
                resultado = service("ProcessorId")
                If (Not resultado Is Nothing) Then
                    procesador = resultado.ToString()
                End If
            Next
    
            busco = New ManagementObjectSearcher("Select * FROM Win32_DiskDrive")
            For Each service As ManagementObject In busco.Get()
                resultado = service("SerialNumber")
                If (Not resultado Is Nothing) Then
                    disco = resultado.ToString()
                End If
            Next
    
            busco = New ManagementObjectSearcher("Select * FROM Win32_PhysicalMemory")
            For Each service As ManagementObject In busco.Get()
                resultado = service("Capacity")
                If (Not resultado Is Nothing) Then
                    memoriaRam += Convert.ToDouble(resultado)
                End If
            Next
    
            Return String.Format("{0}{1}{2}", procesador, memoriaRam, disco)
    
        End Function

    Quería saber si es una buena opción esta función? porque en algunas veces me obtiene códigos distintos de la misma pc.

    Saludos!

    sábado, 20 de mayo de 2017 3:33

Respuestas

  • algunas veces me obtiene códigos distintos de la misma pc.

    Fíjate que en cada una de tus búsquedas haces un foreach que itera sobre los resultados devueltos por la Select de WMI, y va sobreescribiendo la variable a cada vuelta del bucle. Por lo tanto se queda con el resultado de la última línea devuelta por la Select. La más delicada es la del Win32_DiskDrive, que te devolverá todos los discos instalados en el sistema, y te quedas con el último de todos. Esto es importante si han conectado un disco externo o un pen-drive, pues te devolverá el último de todos y no el disco del sistema, con lo que obtendrás un código diferente dependiendo de lo que tengan "enchufado" en el PC en ese momento.

    Otra que es delicada es la memoria. Si el PC está virtualizado, la memoria puede configurarse para que cambie dinámicamente según las necesidades de la máquina virtual, con lo que dará resultados distintos cada vez que la consultes.

    sábado, 20 de mayo de 2017 15:43

Todas las respuestas

  • algunas veces me obtiene códigos distintos de la misma pc.

    Fíjate que en cada una de tus búsquedas haces un foreach que itera sobre los resultados devueltos por la Select de WMI, y va sobreescribiendo la variable a cada vuelta del bucle. Por lo tanto se queda con el resultado de la última línea devuelta por la Select. La más delicada es la del Win32_DiskDrive, que te devolverá todos los discos instalados en el sistema, y te quedas con el último de todos. Esto es importante si han conectado un disco externo o un pen-drive, pues te devolverá el último de todos y no el disco del sistema, con lo que obtendrás un código diferente dependiendo de lo que tengan "enchufado" en el PC en ese momento.

    Otra que es delicada es la memoria. Si el PC está virtualizado, la memoria puede configurarse para que cambie dinámicamente según las necesidades de la máquina virtual, con lo que dará resultados distintos cada vez que la consultes.

    sábado, 20 de mayo de 2017 15:43
  • Ah entiendo...

    Alguna otra solución para obtener un código similar a este? Para evitar lo mencionado anteriormente.



    sábado, 20 de mayo de 2017 16:03
  • Hola,

    Un consejo que te puedo dar, es que tu aplicativo lo anexes a un sistema de base de datos SQL ( donde manejes una estructura normalizada ) 

    con esto podras tener ids unicos de tus equipos y administrar tus licencias de software con rangos de fechas, en cualquier parte de donde estes, sin nececidad informacion de los componentes de tu equipo y basarte en ello..

    Saludos.

    sábado, 20 de mayo de 2017 16:36
  • Hola,

    Un consejo que te puedo dar, es que tu aplicativo lo anexes a un sistema de base de datos SQL ( donde manejes una estructura normalizada ) 

    con esto podras tener ids unicos de tus equipos y administrar tus licencias de software con rangos de fechas, en cualquier parte de donde estes, sin nececidad informacion de los componentes de tu equipo y basarte en ello..

    Saludos.

    Pero eso se hace mediante un servidor? o como?
    miércoles, 31 de mayo de 2017 21:48
  • Hola Federico32113

    Si, en efecto tendrías que realizarlo en una tabla de sql server, en donde tendrás los campos que te recomienda como la fecha por ejemplo para tener el control de las licencias. En algún momento has adquirido alguna licencia y es de esa forma como guardan un control de lo que tu tienes en el software que se este usando.

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 31 de mayo de 2017 22:26
  • Ah pero mi software no esta pensado para trabajar con servidores, así que por el momento trabajo creando este código.

    Saludos!!

    miércoles, 31 de mayo de 2017 23:53