Si tu programa lo entregas en un CD, eso es fisicamente imposible por razones obvias.
Lo que sí puedes hacer es que cada instalacion (las que sean) se ejecute un determinado numero de veces y luego deje de funcionar, lance un mensaje, formatee el sector cero del disco duro del cliente, ect, ect. La lista de perrerias es infinita.
Para ello lo primero que debe hacer tu instalacion es escribir (Savesetting) un numero en el registro. Este numero es las veces que quieres que se ejecute tu aplicacion.
Luego en las primeras lineas de la aplicacion misma, lo primero que tienes que hacer es, cada vez que arranque, leer (Getsetting) ese numero y compararlo para actuar en consecuencia.
Puedes hacer lo mismo con fechas.
La famosa "clave de activacion", lo que hace es borrar esa linea del registro
Esta es la teoria. En la practica lo que quieres es que ponga un ejemplo ¿A que sí?)
PD. Savesetting y Getsetting, escriben y leen en un lugar conocido del registro, y un usuario medio/avanzado te lo crackea rápido. Hay rutinas que escriben en lugares mas oscuros y lúgubres del registro donde es muuuuuuuuucho mas dificil acceder.
Los metodos para proteger programas son interminables, pero los metodos oara reventarlos, y los chavales dispuestos a hacerlo, son infinitos.