1. Take the hard disk serial number
2. Send to your server, and save the serial number and date
3. Every time that opens the program, call to your server and check the time you need.
i think its best secure.
nah, since any serial number of any hardware component can be spoofed easily this is not more secure than having a file somewhere with your installation date. It's just much more development effort without any gain (as you now need to implement and maintain server and client functionality).
Sure, as soon as someone finds the file you lost, but it's the same with any mechanism, as soon as you find out how it works, you can spoof it (it's simply how computers work, on your own device you are the king and can do anything with it). And it will still be enough of a hurdle for most average users, and those who really want to crack your program will break it no matter what. If you need to search a file, or spoof a serial number, both is about as much effort.
The only reliably secure option is to outsource some core functionality to a server, which your application contacts for doing it's job. Without a valid verification there is no way your program could work, no matter what you do locally.
That said, this a massive engineering overhead and besides requiring a lot of work, only is feasable if a stable network connection is ensured.
Anything other as that is simply not secure. Because even if you make the spoofing as hard as possible, use as many layers of obscurity as possible (like encryption, etc.) the last resort, patching out the check in the executable, will always be feasable.
If you can't implement a secure mechanism, at least build something simple, so you don't waste any development time on it.