Pues puedes usar varias formas, como por ejemplo limite de fechas, cantidad de ejecuciones, etc. Estos datos los almacenas en el registro o en algun archivo oculto.
Yo te recomiendo por ejemplo que utilices una clave especial donde se almacene la fecha de instalación, la cantidad de ejecuciones o fecha limite y deba cumplir ciertas reglas matemáticas para evitar que pueda ser modificado manualmente.
Para esto tendras también que hacer que el programa instalador genere la primer clave para ejecutar el programa por primera vez.
Para controlar que no cambien la fecha del sistema puedes también controlar la fecha y hora de los archivos de windows (por ejemplo el pagefile.sys se modifica cada vez que se inicia el sistema, y cada vez que se modifica el archivo de paginación).
Generar algo así no es complicado, pero lleva mucho código y muchas comprobaciones, ya que debes tener en cuenta las posibles tretas que pueden usar para desbloquear el programa.
Aquí tienes un active-x (
http://www.active-x.com/listpage.asp...ct.asp?id=3607) que te permite proteger una aplicacion VB o .NET, claro que no es gratuito, pero puedes probarlo y darte una idea de como proseguir.
Saludos.