The absolute strongest method is hardware.
If the program is always in demo mode unless the needed hardware security dongle is attached to the PC then it doesn't matter if they copy the software. This is just one maker of such devices. If you google for "security dongle", "software dongle" and such you should get several other makers.
Hardware HASP page
Personally I like Aladdin's HASPS because they have clocks and memory you can read/write. So you can offer various options and enable them by setting a bit in the memory of the dongle.
I believe they also make a purely software component that you can add to your software. Basically a wrapper that allows you to set a demo period, after which the software dies etc.
Plan C: You could have your software check a server over the internet for code validation and unlocking.