I think you need to weigh up a number of factors in deciding on software protection, and how invasive or inconvenient the measures will be.
The most invasive (and expensive to implement) measure is the hardware dongle. I doubt this is used much any more because of the huge cost and inconvenience. You need to manufacture a piece of hardware for every machine the software will run on. Legitimate users can be left in the dark should their dongle malfunction, or should they lose or break the dongle. You then need to ship them a replacement. Finally, skilled crackers can patch the portions of your software that query the dongle, rendering the scheme useless. This was typically used in the most expensive software products (AutoCAD for example). From the user point of view this means their software can expire at any time, and if your company goes out of business, eventually the software can no longer be used (legally anyway).
Note: Games manufacturers are still persisting in trying to make the CD a form of hardware dongle, and this can create much consumer frustration, as the methods they use can make the CD hard (if not impossible) to read in some drives, and usually install many shady "device drivers" onto the system to try and prevent workarounds.
The next most invasive, although much cheaper to implement, is on-line activation. The software will typically generate a unique identifier code for the PC it is installed upon, and will send this to the activation server which will give it an unlock code, allowing it to run only on this machine. Windows XP is an example of this. While there is not a piece of hardware to manufacture, lose, or break, this scheme still poses problems for users. Any time they need to move the software to a new machine or re-install their current PC, or even change the hardware configuration enough, they need to re-activate. Also, if they don't have internet access (Yes, this does still happen!) you need a backup scheme, like a call center, where they can phone in their Machine code and have an operator read them their unlock code. This scheme also means that if your company closes or shuts down the activation servers, the software is effectively dead in the water unless the protection is cracked.
Less invasive still is a one-time unlock code that can be applied to the software regardless of the machine it is on. This has a number of advantages for both the user and the software distributor. Firstly, much less support is required since the only problem that can arise is the user losing this code, which you can automatically e-mail them again or read over the phone. This does make piracy a lot easier, but you can mitigate this by branding their name or company name into an obvious place on the software, making it easy to tell whether it has been pirated or not. This method also means that your software can never "expire" on the user as long as they keep the unlock code.
Least invasive is no protection at all. I think that if you are trying to sell a commercial product, this is not going to work. Piracy may increase legitimate sales, since the more people are using the product, the more are likely to buy it, but this same effect can be achieved by allowing a 30 day (or other reasonable period) unlimited trial of the software, and then requiring the activation code. Yes, this can be bypassed, but the people who are prepared to pay for the software are usually not going to go to the effort of bypassing your unlock scheme.
Bottom line: there is no foolproof protection mechanism, and the more foolproof you try and make your mechanism, the more you will irritate your legitimate buyers, and the more support you will need to give, thus making your whole operation less profitable.
End of the very long rant. (Steve Yegge, you now have competition! At least in terms of word count.)