如何防止客户经常使用Demo Java程序?

我已经制作了一个演示小程序,我希望将它传递给我的客户端,以便他可以运行它5次以检查其function。 它不是一个很大的软件,我可以实现一些串行密钥function并制作试用版软件。

我想要一个简单的解决方案,它可以限制程序的使用超过5次,或者可以在阈值限制后自行删除。

我想到了一个解决方案。 我通过相同的程序制作4个.txt文件并将它们存储在diff中。 客户端计算机上的位置和这些文件将存储程序运行的次数。 每次应用程序启动时,它都会检查所有这些文件,如果任何文件包含代表阈值限制的数字,则只需通过说已达到阈值限制即可退出。

还有其他更好的解决方案,但很简单,限制客户端不同时间使用它?

如果程序在其阈值限制后被删除会更好。

如果你想让它变得更简单,那就做一个时间检查,不要让客户端在时间过了之后运行代码,比如从今天起五天或一周之后

您可以尝试下面的代码段

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 } 

您可以在此处查看如何从受信任的时间服务器获取时间。

考虑使用Java Web Start为每个客户使用JNLP文件部署软件,并使用客户特定的,难以猜测的位置。 这允许您进行集中管理,并在时间段结束时删除JNLP。

还要确保始终未缓存小型jar,以便客户联系您的服务器以便能够运行。

让他们通过远程桌面或VNC进行尝试。

对于Windows应用程序,我按以下方式执行

我在我的程序中创建了一个注册表项,第一次使用它的日期。 此密钥隐藏在一个字段中,该字段被命名为非暗示名称和值encripted;

我还存储了它的最后使用日期,以避免时钟技巧。

在我的validation代码中,每次启动程序时,它都会检查初始日期和程序第一次使用的日期。 如果它是正确的,我也会在上次使用程序时存储。 我们有3个案例用于validation:

  1. 如果实际日期大于初始时间,重复演示期间,则不再使用该程序。

  2. 如果计算机日期小于上次使用程序的时间,则用户尝试倒回系统时钟。 在此之后,程序不能再使用了

  3. 最后一种情况是系统日期在初始使用日期之后和到期日期之前。 在这种情况下,允许使用该程序。

    //此代码用于系统注册表访问public static Preferences userPref = Preferences.userRoot();

    //编写注册表userPref.put(“keyName”,“value”);

    //读取注册表String read = userPref.get(key,“0”);

在安装过程中,使用单个文件并将数字(客户端可以使用演示版本的次数)写入文件,而不是4个文件。 在每次运行时检查文件是否存在,减少数量并再次写入同一文件。

如果找不到文件或值为零,则退出程序。

很快这就是我的想法。

  1. 创建一个类似的数据结构

class {

prop uid = HOSTNAME; prop MaxUsage = 5; prop AlreadyUsed = 5;

}

  1. 将此类实现为Serializable,将此文件写入磁盘而不使用HOSTNAME,例如http://www.java2s.com/Code/Java/File-Input-Output/Serializerclass.htm

  2. 将此可序列化文件与应用程序一起发送。

  3. 当应用程序第一次运行时,使用运行应用程序的主机的HOSTNAME编写属性uid。 每次应用程序运行时减少AlreadyUsed并将其保存到文件中。

  4. 每次运行应用程序时检查文件是否存在,如果没有退出,如果是,则检查uid是否有正确的HOSTNAME,并且已经使用的数量不是== 0

如果您使用像JavaWebstart这样的东西,它也会非常容易。

希望能帮到你的事业。

给他们一个客户“密钥”,并让软件在您自己的Web服务器上询问一个小型servlet,该产品当前是否对使用此密钥的客户有效。