We distribute our most popular software with a site license, so it was necessary to come up with a routine that would discourage users from sharing their activation information (our own concoction) with other users. What we decided on was incorporating their company name into our activation routine under the premise that they would be less willing to share their activation information if they also had to provide their company name as part of the activation routine.
We provide them with an activation code that, in part, contains a portion of their company name. In addition to entering their serial number, they also have to enter their company name and our activation routine will validate the activation code against the serial and company name (plus some other stuff). Their company name is saved and in the event they send an email requesting assistance or encounter an error, it will send us the company name along with their serial number.
It seems to work very good as a piracy deterrent and much less troublesome than an online activation routine - tried it and ran into nothing but problems. Especially in companies that have their internet locked down. You can imagine buying an application online, downloading it in minutes, and then being unable to activate it because you can get the online activation to work. Even if it's their problem, they will blame you, and that's exactly what they did.
Designing a good activation routine it tedious and takes great care and time, but if you are selling commercial packaged software, it's worth investing the effort.