views:

182

answers:

6

I know this is possible since there are so many packages available where you have a "Standard", "Professional", and "Enterprise" version of a package... but does anyone have any decent tutorials available on how a uISV would go about learning the techniques involved in developing a tiered feature piece of software?

I've done multiple searches through the different channels you would typically use (google, MSDN, etc.), but have so far come up empty.

Any ideas/suggestions would be appreciated.

Thx.

A: 

You might want to take a look at roles based security (assuming it's a web app) within the .Net Membership Provider. You could add roles "Tier 1" and "Tier 2" or you could add a role for each feature that a tier allows for a user. Then on the page that implements the tiered feature, you display it if the user.IsInRole("featurename").

Bramha Ghosh
A: 

It depends on what features you want to prevent from the user. if all your features are independant then Bramha's solution is a good one, but if your features are not, then it's a whole diffrent story, you need to develop an internal "framework" which will allow an abstraction of each feature.

Orentet
+1  A: 

The easiest way to do this is to create one program containing all features, and enable/disable them depending on the product key.

A second option could be to create a minumum sceleton for your program, and use a add-in architecture to add inn more functionality. This means you could deploy only the parts that are needed for the version you'r deploying.

With .net you could take a look at the System.AddIn namespace or reflection stuff...

Arjan Einbu
+1  A: 

I would go for simpler solution:

  • put your code into assemblies
  • create shell projects that contain only main form with menus and toolbars for each version. Menus and toolbars should only activate forms/function from assemblies.

This way you don't need config files for enabling/disabling features, there is no "feature access" code as you should have if you put everything into one application. Also, there is no chance that your user hacks your application or key and get access to features he did not pay.

Downside is that you cannot upgrade user from "Standard" to "Professional" just by sending new key, user must download and install new application.

zendar
A: 

I would probably separate the features using compiler directives. This way, you have one code base but can 'compile in' several different features in your application. If you compile everything in and separate the features using different serial keys pirates will have a too easy time. After all, features can't be unlocked by dodgey serials if they aren't there.

Gary Willoughby
Gary,Do you have any decent articles to read into in order to find out how to do this on a VS.Net 2008 project?This is what I was looking for, but haven't been able to locate anything decent.
Richard B
A: 

From a software piracy perspective, you may want to use conditional compiling (using #define and #if) or separate assemblies - basically: If a feature is not available in the standard or trial version, do not disable it, but remove it completely.

If you try working with some sort of global enum "LICENSETYPE { Standard, Enterprise }", keep in mind that looks like Crack.net exist which allow to easily change it.

On the other hand: Having only one executable that contains all features and enables/disables them on a per-key-basis makes deployment and version management a lot easier.

Michael Stum