2010-01-27 88 views
5

我已经制作了一个演示小程序,我想将其发送给我的客户,以便他可以运行5次以检查其功能。它不是一个大的软件,我可以通过它来实现一些串行键功能并制作试用软件。如何防止我的客户经常使用Demo Java程序?

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

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

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

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

+2

如果客户端删除那些文本文件,他可以使用你的软件直到永恒 – 2010-01-27 11:27:10

回答

7

如果你想使它真正简单,把时间检查,不允许客户端运行的代码,当时间到期后,说五天从今天

1周你可以试试下面片断

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 
} 

您可以检查here关于如何从受信任的时间服务器获取时间。

+2

我认为,如果客户端每次运行时都会将时钟设回来,那么可以打破....不是吗? – 2010-01-27 11:41:45

+0

是的,但你可以尝试从互联网 – 2010-01-27 11:43:52

+0

一些可靠的消息来源得到的时候,你可以请告诉我如何从一些外部源提取时间? – 2010-01-27 11:47:05

3

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

还要确保一个小的jar总是未缓存,所以客户需要联系您的服务器才能运行。

+0

我可以将我的独立应用程序转换为jnlp吗?如果是的话,那么你能告诉我如何? – 2010-01-27 11:45:17

+0

我喜欢你的解决方案和@Ravi的解决方案。加。给你,这将是更好的解决方案? – 2010-01-27 11:47:53

+0

客户端防火墙是您需要注意的事情,如果它阻止您的程序访问互联网,两种解决方案都将失败:-( – 2010-01-27 11:55:25

0

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

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

1

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

+0

我认为这通常是最简单的解决方案,让程序保持在内部,并避免客户端的任何安装困难。 – jakobengblom2 2010-01-27 12:11:06

1

的Windows应用程序,我这样做是通过以下方式

创建我的程序中一个注册表项,它被用于第一次约会。该密钥隐藏在一个非暗示性的名称和所指定的值的字段中;

我还存储它使用的最后日期,以避免时钟伎俩。

在我的验证代码中,每次启动程序时,它都会首次检查程序的使用日期和日期。如果它是正确的,我也会在上次使用该程序时存储它。我们有三种情况:验证:

  1. 如果atual日期比最初的时候更大,overlaping演示期内,该方案不再使用。

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

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

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

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

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

+0

那么,当客户在虚拟机上运行此操作并在第一次运行虚拟机之前会发生什么情况会创建快照?当产品到期时,要再次运行它,回滚快照并运行N次。 – 2010-01-28 09:20:41

0

很快这就是我的想法。

  1. 创建像

类{

丙UID = HOSTNAME的数据结构; 道具MaxUsage = 5; 道具AlreadyUsed = 5;

}

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

  • 船舶与应用此序列化的文件。

  • 当应用程序第一次运行时,将属性uid与运行该应用程序的主机的HOSTNAME一起写入。每次运行应用程序时减少AlreadyUsed并将其保存到文件。

  • 每次运行应用程序检查文件是否存在,如果不退出,如果是再检查uid具有正确的主机名和使用已经数不== 0

  • 如果你正在使用类似JavaWebstart的东西,它也会很容易。

    希望有所帮助你的事业。

    0

    给他们一个客户的“关键”,并有软件问一个小的servlet自己的Web服务器上的产品目前是否有效这一关键客户。

    相关问题