Article Options
Premium Sponsor
Premium Sponsor

 »  Home  »  Reviews  »  Software Reviews  »  XHEO|Licensing
by John Spano | Published  09/26/2003 | Software Reviews | Rating:
John Spano

John Spano cofounder and CTO of NeoTekSystems, a Greenville, South Carolina technology consulting company. NeoTekSystems offers IT consulting, custom programming, web design and web hosting. We specialize in Microsoft .Net enterprise development and business design.

I have six years of experience in software architecture. My primary focus is on Microsoft technologies, and I have been involved in .NET since beta 1. I currently hold a MCSD certification, 2 MCTS's (Windows, Web) a MCPD in Distributed, 2 MCITP's, a Microsoft MVP, and have won the Helper of the Month contest for July 2002 in the devCity.NET forums.

Corporate URL:
Primary email:
Alternate email:


View all articles by John Spano...

Every once and a while one comes across a great product that does some needed function very well. XHEO|Licensing is one such. It is a comprehensive set of tools that does program licensing, and it does it very well.

Written totally in C#, it targets the .NET platform and provides licensing services for your applications and classes. It has many different kinds of licensing types and is very flexible, fitting all licensing needs. It will work with both Framework versions 1.0 and 1.1.

XHEO allows for all of the "standard" licensing schemes, such as windows activation style, central web licensing server, trial versions and serial number unlocking of functionality. It also provides ways to do custom licensing and "license on demand", which generates licenses when the user downloads or buys your product on the fly. In this review, I will walk through several of the common methods of licensing and give my thoughts on XHEO. I decided to try Window's activation, since it is fairly common, and a central web-licensing server, which is also very popular.

First we will take a quick look at the standalone interface that XHEO provides. It is designed to define your licensing schemes that you want use. After choosing what kinds of licensing you want, you generate a license file from it to distribute with your product, or tell your web server what licenses are valid.

The License Manager is simple to use and laid out well. To set up our license server for the Windows activation to run against, we simply run a wizard. It generates the license and license server for us. I created a quick C# application that shows a blank form to protect. Here is a screen shot showing the filled out license and properties.

Click for a full-sized image
(click for a full-sized image)

The wizard has also generated a web service that I have compiled. I didn't have to make any changes to the generated web service code, but it is fully customizable also. Jut make changes to the web service code to do any custom actions you want, such as writing to different database tables, or logging information when your product is activated.

Now let's take a look at the code required in our Windows application. I cut out the standard form code to just show the relevant parts. XHEO uses attributes to acquire licenses for classes. Here is the code to acquire a license. If the user hasn't activated the software yet, XHEO shows a dialog offering to activate it and the remaining grace period.

[ LicenseProvider( typeof( Xheo.Licensing.ExtendedLicenseProvider ) ) ]
public class Form1 : System.Windows.Forms.Form {
    private System.ComponentModel.Container components = null;
    private License _license = null;

    public Form1() {
        _license = LicenseManager.Validate( typeof( Form1 ), this );

    protected override void Dispose( bool disposing ) {
        if( disposing ) {
            if (components != null) {
            if( _license != null ) {
                _license = null;
        base.Dispose( disposing );

You will notice that the main worker code is in two lines; first the attribute on the class, and then the actual call to fill out the _license variable. Here is the default form the user sees if they haven't activated yet. It is customizable also.

Click for a full-sized image
(click for a full-sized image)

That's it. Just host the web service and XHEO does the rest for you! Very quick and easy.

To give it a slightly harder test, I decided to use the license server type of licensing. It differs slightly from the above activation type in that you can continually check the license server to make sure the end user has a valid license. In the activation server, the user only connects to the server one time, to register the software on a computer. With the license server, you can set up a set time period to check back with the server. This allows fine control over the end user's license. You could extend it without having to send something to the end user, or also turn it off should you need to (a simple flip of a bit field in the database).

The steps to set up the license are very similar to the activate server. We create a new license and give it a limit type of license server. After filling out the properties, we have the following.

Click for a full-sized image
(click for a full-sized image)

The license server wizard creates our license server for us and the code is exactly the same as above for the client application. When we create the license itself, it gets automatically registered with our license server. All that's left is to distribute our application. To our end user, the process is seamless, unless of course they are trying to steal your application!


Overall I found XHEO'S Licensing product very easy to use with loads of functionality. It will be able to quickly and effectively license your software any way you choose, from simple serial number unlocking to full web server licensing, and is reasonably priced for any budget. They also have a very good support team for any questions you have. The answered all my questions very well, usually in under thirty minutes. For more information and a trial download, go to

How would you rate the quality of this article?
1 2 3 4 5
Poor Excellent
Tell us why you rated this way (optional):

Article Rating
The average rating is: No-one else has rated this article yet.

Article rating:2.31111111111109 out of 5
 45 people have rated this page
Article Score21420
Sponsored Links