la forma, mas usada de la que se tiene conocimiento es poner una activacion al software.
serial
clave
etc
de otra manera es imposible. por ejemplo
si tienes 3 maquinas y a las 3 les intalas tu software y solo pones que el sistema acepte 3 claves de activacion, solo con una rutina que se conecte a internet a algun servidor para reportar que una de las claves fue usada seria el medio de control para saber si alguien ejemplo una 4 maquina intenta usar una clave ya usada. pero si hicieras esto y alguien bloquea esta rutina o no tiene internet.
como haras que tu programa sepa que hay tres maquinas con tu programa instalado?
se podrian instalar 300 maquinas con la misma clave siempre y cuando el programa no tenga manera de saber que hay otro programa usando la misma clave.
un caso especial son los tipos de IBM que hacen que los seriales expiren mensual para sus productos y hay que estar bajando licencias a cada rato