We have a small .Net program that we sell with individual licenses. The individual licenses are enforced by registering a key file that is generated using information from the machine used to install the program (MAC address, etc.)
Now, we have a customer request for a site-wide license, such that they can deploy to as many machines on their site as possible. From the technical POV I’m not sure what are the usual approaches for this; our old approach won’t work since we can’t map the license to any machine-specific information.
Any suggestions?
A few more details:
- the program is a client-side program that includes an Office Add-In
- the machines to be installed on may or may not have internet access
- we aren’t restricted to .Net-only approaches, I’m just looking for a general idea of how this sort of thing is usually handled
There are software techniques, such as a central license server — not unlike how DRM works. The best solution depends heavily on the details of your app and what your customers are willing to tolerate.
However, it seems to me that the industry standard in this area is trust your customer, and rely on contract terms to prevent illegal proliferation. In other words, issue a single license key. Then, if someone calls for support or asks for an upgrade, ask for the same license key. If a customer who isn’t supposed to have the key reports that they do, then the original customer gets some sort of penalty or bill for letting the software out of their control; the terms would be spelled out in your contract with them. Many companies seem to end up just collecting data along those lines, but never actually go as far as collecting penalties.
Another approach is that your software could ping a central server on the Internet (if it’s available), and report its license key. The server then authorizes the application to run. If the key leaks from the customer, then the old one gets invalidated, and the customer is required to update all of their existing clients.