2010-01-27 48 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服務器上的產品目前是否有效這一關鍵客戶。

    相關問題