I'd like to discuss different solutions for making my VB application expire after X days. Or maybe not expire, but be crippleware unless registered.

I'd like to make it so when my application is first run, it prompts for a registration key/code. If the user enters nothing, demo mode is entered, and the program will either expire in X days, or be crippled in some manner. If a proper registration key is entered, the program is fully functional.

What is the most effective (and SECURE) way to do this? The malicious user shouldn't be able to change the system clock or easily edit the registry or any of that.

And how will the registration keys work? How will some fail and some work, and how do I determine that?