How to prevent a Demo Java Program from my client&

2020-07-13 10:57发布

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 deleted after its threshold limit.

7条回答
Rolldiameter
2楼-- · 2020-07-13 11:12

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:

  1. If the atual date is bigger than the initial time, overlaping the demo period, the program isn't used anymore.

  2. 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

  3. 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");

查看更多
老娘就宠你
3楼-- · 2020-07-13 11:17

Let them try it via Remote Desktop or VNC.

查看更多
Animai°情兽
4楼-- · 2020-07-13 11:21

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.

查看更多
对你真心纯属浪费
5楼-- · 2020-07-13 11:22

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.

查看更多
做个烂人
6楼-- · 2020-07-13 11:22

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.

查看更多
贪生不怕死
7楼-- · 2020-07-13 11:25

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.

查看更多
登录 后发表回答