Comment: "Cloud" it (Score 1) 598
Basically the only thing you can do is host your program as a cloud service, with dongles. That doesn't mean you should host users files (depends on what exactly the software does and for whom) necessarily, but core parts of your software should be online only.
Sell or give a away a free 'thin' client, that should always let users open files, convert them to another format, that sort of thing. But any actual functionality should require authenticating with your service.
If you're in the 10k/copy space you can set up the licence keys such that you directly track who has them, and where they're from, and if someone tries to access the software from out of a valid range you can simply block them.
There are a couple of ways you could do it, one is to have the client send data to your server to execute, the other is to dynamically pull down modules of the program as needed, and then clean them up once they finish executing. Keeping the data on your servers is the most secure from your perspective, but the least desirable from your customers perspective. Downloading program modules in real time shouldn't be too hard, but someone really determined could probably grab all of the modules and then disable the web check or redirect it, that's a fairly significant pain in the arse though, especially if you're a legitimate business then you're very clearly working hard to pirate the software, and that could land you in trouble, and anyone illegitimate well, they weren't customers anyway.