Are there any standard or "best practice" ways of limiting feature functionality for a particular application?
Example: We have a product with a variety of features, and our customers can pick and choose which features they would like to use, and the cost of the product varies based on which features they are actually using.
In the past, we have distributed along with our software installer an encrypted license file that contains information about the customer, as well as the collection of features that they have enabled. In code, we read from the license file and enable the functionality according to the license file.
This seems to work fine, except there a few disadvantages:
Upgrading users with new functionality can be sort of a pain
If a particular feature shows up in multiple places throughout the application, a developer might not realize that this feature should be licensed, and forget to check the license file before granting functionality to the user
If the license file becomes corrupted, deleted, moved, renamed, etc. the application will not run
We're getting ready to roll out a new set of features, and I was just curious what others in the community have done to tackle this problem?