How to prevent a Demo Java Program from my client's regular use?
I have made a demo small program that I want to deliver to my client so that he can run it for 5 times to check its functionality. It is not a big software for which I implement some serial-key functionality and make a trial software.
I want a simple solution which can restrict the use of the program more than 5 times or which can delete itself after its threshold limit.
One solution came in my mind. I make 4 .txt files through the same program and store them at diff. locations on the client computer and these files will store the number of times the program has been run. Each time the application starts, it checks all those files and if any file contain the number representing the threshold limit, it simply exit by saying that the threshold limit has been reached.
Is there any other more better solution, yet simple, to restrict the client from using it various times?
It would be even more better if the program gets delet开发者_StackOverflow社区ed after its threshold limit.
If you want it make really simpler, put a time check and don't allow client to run the code when the time has expired after say five days or one week from today
You can try below snippet
Calendar expiry = Calendar.getInstance();
expiry.set(2010, 1, 31,0,0); // Expire at 31 Jan 2010
Calendar now = Calendar.getInstance();
// If you don't trust client's clock, fetch time from some reliable time server
if( now.after(expiry)){
// Exit with proper expiry message
}
else
{
// let the customer enjoy your software
}
You can check here on how to fetch time from a trusted time server.
Consider using Java Web Start to deploy your software with a JNLP file per customer with a customer specific, hard to guess, location. This allows you to do centralized management, and delete the JNLP when the time period is up.
Also ensure that a small jar is always uncached so the customer need to contact your server to be able to run.
Let them try it via Remote Desktop or VNC.
For windows applications, I do it in the following manner
I create a registry key inside my program, with the date it was used for the first time. This key is hidden in a field nammed with a non suggestive name and the value encripted;
I also store the last date it was used, to avoid the clock trick.
In my validation code, everytime I start the program, it checks the atual date and the date the program was used for the first time. If it is correct, I store too the last time the program was used. We have 3 cases for validating:
If the atual date is bigger than the initial time, overlaping the demo period, the program isn't used anymore.
If the computer date is smaller than the last time the program was used, the user tried to rewind the system clock. After this the program can't be used anymore
The last case is when the system date is after the initial use date and before the expiration date. In this case, the program is allowed to be used.
// This code is for system registry access public static Preferences userPref = Preferences.userRoot();
// Write the registry userPref.put("keyName", "value");
// Read the registry String read = userPref.get(key, "0");
Instead of 4 files, have single file and write the number (number of times the client can use the demo version) to the file during installation. On every run check whether the file exists, decrement the number and write again to the same file.
If the file is not found or the value is zero exit the program.
Quickly this is what I think.
- Create a Data Structure like
class {
prop uid = HOSTNAME; prop MaxUsage = 5; prop AlreadyUsed = 5;
}
Implement this class as Serializable, Write this file to disk without the HOSTNAME e.g. http://www.java2s.com/Code/Java/File-Input-Output/Serializerclass.htm
Ship this serializable file with the application.
When the application runs the first time write the property uid with the HOSTNAME of the host the app is running on. decrement the AlreadyUsed every time the app runs and save it to file.
Every time the application runs check if the file is present, if not exit, if yes then check the uid has the correct HOSTNAME and that the number of Already used is not == 0
If you are using something Like JavaWebstart it will be very easy also.
Hope that helps your cause.
Give them a customer "key" and have the software ask a small servlet on your own web server whether the product is currently valid for the customer with this key.
精彩评论