2010-10-26 53 views
2

我想制作一个只能运行特定次数的java程序。例如2,5,10等,之后它必须抛出异常。如何限制Java程序执行N次

不允许使用任何文件或数据库这一点。有人给了我一个注册表的提示!但我不知道如何使用它。 请帮我是这方面...

+0

这是仅用于Windows的吗?因为显然,在Linux或OS X上没有注册表。 – 2010-10-26 10:39:13

+0

仅适用于WINDOWS! – Arslan 2010-10-26 10:50:19

+3

听起来像复制保护方案。你注定要失败。 – 2010-10-26 11:56:13

回答

4
+0

这可能是非Windows平台上的文件。但是,应用程序必须将状态存储在某个地方! – 2010-10-26 10:39:22

+0

是的,我没有看到另一个解决方案! – 2010-10-26 10:40:25

+1

亲爱的!你能给我发简单的代码吗? a会非常感谢你的这一点。 – Arslan 2010-10-26 10:45:30

0

如果应用程序。有一个GUI,它可以使用Java Web Start启动并使用PersistenceService。这是一个小的demo. of the PersistenceService。该代码可供下载。

编辑: 而PersistenceService应该有一个JRE,而不仅仅是Windows中的任何机器上工作。

4

不管这个问题是可以解决的取决于什么是“任何文件或数据库”的意思。

  • 根据您的观点,Windows注册表是一种文件/数据库。当然,值重新保留在注册表中的唯一原因是因为注册表更改被写入光盘。

  • ,您可以移动状态(如次数的计数的应用程序已经运行),其他一些服务在本地计算机上。但再一次,除非服务将该状态保存到光盘(或其他稳定的存储介质),否则本地计算机将会重新启动。

  • 您可以将状态移动到远程机器上的服务,但是如果不保存到光盘等,可能会再次丢失状态。此外,您可能无法在需要该状态时联系该远程服务;例如当启动应用程序。

  • 您可以复制的状态,大量的远程服务,而无需光盘,但网络故障(或用户从网络上拔下)会阻止你访问的状态。

所以总结一下,如果你不能写入光盘(或NVRAM,胶带等)在本地,你不能保证计数器不会被重置,并在需要时将可用。因此,您不能保证应用程序不会运行超过允许的次数。


我想你正试图想出一些用户不能颠覆的有限使用方案;例如通过删除文件/数据库/任何计数器的东西。不幸的是,除非你物理地控制运行应用程序的硬件和操作系统,否则你不能阻止某人破坏存储在机器上的任何计数器。具有“根”或完全管理员权限或具有物理访问权限的任何人都可以最终更改机器上的任何数据。

您可以做的最好的事情是与远程服务器建立安全连接,并使用它来保存使用计数器。但即使这样也是徒劳的,因为有动机的人可以对应用程序的关键部分进行反向工程,并禁用检查计数器的代码。

0

即使这听起来像是试图进行复制保护,但您可能需要考虑自修改代码。这里有一个关于这个主题的有趣讨论:Self modifying code in Java