Our company's main application is a desktop program that is used at warehouses and written in C# and Windows Presentation Forms.

The next thing we want to be able to do is track when customers open up the application and when it is being used. The reason for this is so we can charge them per month, based on if they are/arn't using the application. My boss is having me research different ways to "license" the product under these requirements.

Not having any experience doing this, a few things come to mind. I could create a web application that runs on a server, and every time the desktop application is opened and the user logs in, the application connects to the server and marks a database with the DateTime. Or is there licensing software that I can use to accomplish this? Just looking for tips/advice from people who have experience with this type of stuff.

  • You may wish to look into license management software, details about techniques and known software are here en.wikipedia.org/wiki/License_manager and you can google for more. Also read about floating licenses if you're unfamiliar with them, the common theme being a server exists to request a license from every time you use the software. en.wikipedia.org/wiki/Floating_licensing – Jimmy Hoffa Nov 19 '12 at 23:16
  • That said, the most common way to approach licensing like this is good old fashioned web app. That's one of the reasons they've become so prolific, you can charge for usage easily with full control over authorizing usage because the software may only be used by accessing your servers. If your app is WPF you might look at converting to SilverLight and hosting it so it forces them to authenticate before using the software. – Jimmy Hoffa Nov 19 '12 at 23:19
  • 1
    @JimmyHoffa: The information in these comments looks good enough to be put into an actual answer. – Robert Harvey Nov 19 '12 at 23:21
  • @RobertHarvey Ugh, I hate writing answers when I don't know the topic inside and out. If nobody puts together something more comprehensive I'll move it to an answer later... – Jimmy Hoffa Nov 19 '12 at 23:49
  • 1
    Consider, does your cutomer want application that does not work if they cannot connect to your server? And if it works without, what happens if they block connection? – user470365 Nov 20 '12 at 9:54

The quickest and cheapest way is to do something similar to what you suggested: Every time the user performs a main function of your program, say it's "Pack Widgets onto Warehouse Floor," log that function, with an ID of the individual installation of the program, username and maybe the machine name too. Generate the unique ID on installation - maybe a GUID generated during the installation process.

The reason I say a main function (or several/all main functions) of the program is that they could just start the program once and you will only have one entry for billing. This way you can avoid that scenario, and also have the added side-benefit of seeing which functions of your program which users are actually using the most. This can help your sales team and also your development team target the correct areas.

Make sure that you tell the client that you're going to be billing them based on usage and that the program needs to connect to external servers in order to function. However, you need to make sure that the client's business can continue to function when their internet connection is down. Cache these usage logs locally in an encrypted cache (so that tech savvy clients can't jippo your system easily) and then have a maximum period that the program can function without having an internet connection, say a week or two. After that period, the program will refuse to work unless it connects to your server.

Let's say the client can't connect because a hurricane has taken down the comms for two weeks. In that really bad situation, the client types in a code that you give them over the phone that gets evaluated in your program (NOT something like "give me more time", but a proper code that gets checked by a relatively simple algorithm) and they get another week's grace period. However, I discourage this as it adds unnecessary complexity. If you're concerned about this type of scenario and you're on a monthly billing cycle, rather consider making the cache period three or four weeks.

  • I would make this usage log feature mainstream with a reportUsageToVendor() function running monthly for billing purpose, or with a synchronization mechanism ala Dropbox. – mouviciel Nov 21 '12 at 8:17
  • @mouviciel: What do you mean by "mainstream"? – AndrewJacksonZA Nov 21 '12 at 9:26
  • My apologies for my poor english. I mean that instead of having a connection at each use of sofware and a log only when internet is down, I would implement a log everytime and a connection when internet is up. – mouviciel Nov 21 '12 at 10:30
  • OK, I think I now understand what you meant to say. – AndrewJacksonZA Nov 21 '12 at 14:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.