This is what I use for a user registration system that includes an expiry date.
When my time limited demo expires a Register now buttom takes the user to a Registration Form that sends an email or goes to a website.
Sending a combination of registration information and requested "lease" duration then this is crypted (there are many schemes) and give the user an unlock code that sets up the next expiry date.
Automatic warnings of expiry within your software, as well as reminder emails, and once payment is recieved gives a new code (and expiry date).
Checking via your web database that only one unlock code for that registration occurs, finishes the process.
Down side is web access is then required by the client and not always available for various reasons.
All of this can be automated via your website or done personally, depending on the number of users.
This can take quite a bit to implement and remember that securing your solution (see the very interesting recent discussion about that) is vital.
The more costly in terms of dollars or time spent must be weighed against the return you will get and your idea of the cost to you of piracy.
HTH
Regards
GlennS