2010-10-26 36 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