我想创建一个必须只运行特定次数的java程序。例如2,5,10等之后它必须抛出异常。
不允许为此使用任何文件或数据库。有人给了我一些REGISTRY的暗示!但我不知道如何使用它。 请帮帮我......
答案 0 :(得分:4)
您可以使用java首选项(Windows上的注册表):
您可以在此处找到一些示例用法:
答案 1 :(得分:4)
此问题是否可解决取决于“任何文件或数据库”的含义。
根据您的观点,Windows注册表是一种文件/数据库。当然,值重新启动时值保留在注册表中的唯一原因是因为注册表更改被写入光盘。
您可以将状态(例如应用程序运行次数的计数)移动到本地计算机上的某个其他服务。但是,除非服务将该状态保存到光盘(或其他一些稳定的存储介质),否则它将丢失,因为本地机器重新启动。
您可以将状态移动到远程计算机上的服务,但如果没有保存到光盘等,它可能会再次丢失。此外,您可能无法在需要时联系该远程服务州;例如启动申请时。
您可以将状态复制到大量没有光盘的远程服务,但网络故障(或用户从网络中拔出)将阻止您访问该状态。
总而言之,如果您无法在本地写入光盘(或nvram,磁带等),则无法保证计数器不会被重置,并且在需要时它将可用。因此,您无法保证应用程序的运行次数不会超过允许的次数。
我想你正试图想出一些用户不能破坏的有限使用方案;例如删除文件/数据库中的东西/无论该计数器。遗憾的是,除非您实际控制应用程序运行的硬件和操作系统,否则您无法阻止某人破坏存储在计算机上的任何计数器。拥有“root”或完全管理员权限或具有物理访问权限的任何人都可以最终更改计算机本身的任何数据。
您可以做的最好的事情是建立与远程服务器的安全连接,并使用它来保存使用计数器。但即使这样也是徒劳的,因为有动力的人可以对应用程序的关键部分进行逆向工程,并禁用检查计数器的代码。
答案 2 :(得分:0)
如果应用程序。有一个GUI,它可以使用Java Web Start启动并使用PersistenceService。这是一个小demo. of the PersistenceService。该代码可供下载。
编辑: PersistenceService应该适用于任何具有JRE的计算机,而不仅仅是Windows。
答案 3 :(得分:0)
尽管这听起来像是尝试复制保护,但您可能需要考虑自我修改代码。这里有一个关于这个主题的有趣讨论:Self modifying code in Java