2010-01-27 4 views
5

Ich habe ein kleines Demo-Programm erstellt, das ich meinem Kunden liefern möchte, damit er es 5 Mal ausführen kann, um seine Funktionalität zu überprüfen. Es ist keine große Software, für die ich einige Serientastenfunktionen implementiere und eine Testsoftware mache.Wie kann ich verhindern, dass ein Demo-Java-Programm von meinem Kunden regelmäßig verwendet wird?

Ich möchte eine einfache Lösung, die die Verwendung des Programms mehr als 5 Mal einschränken kann oder die sich selbst nach seinem Grenzwert löschen kann.

Eine Lösung kam mir in den Sinn. Ich mache 4. Txt-Dateien über das gleiche Programm und speichern sie bei diff. Standorte auf dem Client-Computer und diese Dateien werden die Anzahl der Male gespeichert, die das Programm ausgeführt wurde. Jedes Mal, wenn die Anwendung gestartet wird, überprüft sie alle diese Dateien und wenn eine Datei die Zahl enthält, die den Schwellenwert darstellt, wird sie einfach beendet, indem sie sagt, dass der Schwellenwert erreicht wurde.

Gibt es noch eine bessere Lösung, die jedoch einfach ist und den Client davon abhält, sie mehrmals zu verwenden?

Es wäre noch besser, wenn das Programm nach seinem Grenzwert gelöscht wird.

+2

Wenn der Client diese Textdatei löscht, kann er Ihre Software bis zur Ewigkeit verwenden –

Antwort

7

Wenn Sie es wirklich einfacher machen, eine Zeitprüfung gestellt und erlaubt nicht Client den Code auszuführen, wenn die Zeit nach fünf Tagen abgelaufen sagen oder eine Woche ab heute

Sie können unten versuchen Snippet

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 
} 

Sie können überprüfen, here, wie Sie Zeit von einem vertrauenswürdigen Zeitserver abrufen.

+2

Ich denke, dass kann gebrochen werden, wenn der Client seine Uhr jedes Mal zurückstellt, wenn er den script läuft .... Ist es nicht? –

+0

Ja, aber Sie können versuchen, die Zeit von einer zuverlässigen Quelle im Internet zu bekommen –

+0

können Sie mir bitte sagen, wie man Zeit von einer externen Quelle holt? –

3

Sie können Java Web Start verwenden, um Ihre Software mit einer JNLP-Datei pro Kunde mit einem kundenspezifischen, schwer zu erratenden Speicherort bereitzustellen. Auf diese Weise können Sie eine zentralisierte Verwaltung durchführen und den JNLP löschen, wenn der Zeitraum abgelaufen ist.

Stellen Sie außerdem sicher, dass ein kleines Glas immer nicht zwischengespeichert ist, damit der Kunde sich mit Ihrem Server in Verbindung setzen muss.

+0

Kann ich meine eigenständige Anwendung in jnlp konvertieren? Wenn ja, könnten Sie mir bitte sagen, wie? –

+0

Ich mochte Ihre Lösung und @ Ravis Lösung. Gem. zu dir, welches wäre die bessere Lösung, um damit zu gehen? –

+0

Die Firewall des Clients ist etwas, das Sie beachten müssen, wenn es den Internetzugang Ihres Programms blockiert, werden beide Lösungen fehlschlagen :-( –

0

Anstelle von 4 Dateien eine einzelne Datei erstellen und die Anzahl (Anzahl, wie oft der Client die Demoversion verwenden kann) während der Installation in die Datei schreiben. Prüfen Sie bei jedem Lauf, ob die Datei existiert, dekrementieren Sie die Nummer und schreiben Sie erneut in dieselbe Datei.

Wenn die Datei nicht gefunden wird oder der Wert Null ist, beenden Sie das Programm.

1

Lassen Sie sie es über Remote Desktop oder VNC versuchen.

+0

Ich denke, das ist oft die einfachste Lösung, das Programm intern zu halten und dem Kunden jegliche Installationsschwierigkeiten zu ersparen. – jakobengblom2

1

Für Windows-Anwendungen, ich mache es auf die folgende Weise

ich einen Registrierungsschlüssel in meinem Programm zu erstellen, mit dem Datum es zum ersten Mal verwendet wurde. Dieser Schlüssel ist in einem Feld verborgen, das mit einem nicht suggestiven Namen und dem Wert encripted versehen ist.

Ich auch das letzte Datum, das es verwendet wurde, um den Takt Trick zu vermeiden.

In meinem Validierungscode prüft es jedes Mal, wenn ich das Programm starte, das tatsächliche Datum und das Datum, an dem das Programm zum ersten Mal verwendet wurde. Wenn es korrekt ist, speichere ich auch das letzte Mal, als das Programm benutzt wurde. Wir haben 3 Fälle für die Validierung:

  1. Wenn das atual Datum ist größer als die Anfangszeit, die Demo-Periode overlaping, das Programm nicht mehr verwendet wird.

  2. Wenn das Computerdatum kleiner ist als das letzte Mal, als das Programm verwendet wurde, hat der Benutzer versucht, die Systemuhr zurückzuspulen. Danach kann das Programm nicht mehr verwendet werden.

  3. Der letzte Fall liegt vor, wenn das Systemdatum nach dem Datum der ersten Verwendung und vor dem Ablaufdatum liegt. In diesem Fall darf das Programm verwendet werden.

    // Dieser Code ist für Systemregistrierungszugriff öffentliche statische Einstellungen userPref = Preferences.userRoot();

    // Schreiben Sie die Registrierung userPref.put ("keyName", "value");

    // Lesen Sie die Registrierung String lesen = userPref.get (Schlüssel, "0");

+0

Was passiert also, wenn der Kunde das auf einer VM ausführt und vor dem ersten Ausführen einen Snapshot erstellt? Wenn das Produkt abläuft, führen Sie den Snapshot erneut aus und führen Sie N mehrmals aus, um es erneut auszuführen. –

0

Schnell ist das, was ich denke.

  1. Erstellen einer Datenstruktur wie

Klasse {

prop uid = HOST; Stütze MaxUsage = 5; Stütze AlreadyUsed = 5;

}

  1. diese Klasse implementieren als Serializable, schreiben Sie diese Datei auf die Festplatte ohne die HOST z.B. http://www.java2s.com/Code/Java/File-Input-Output/Serializerclass.htm

  2. Senden Sie diese serialisierbare Datei mit der Anwendung.

  3. Wenn die Anwendung zum ersten Mal ausgeführt wird, schreiben Sie die Eigenschaft uid mit dem HOSTNAME des Hosts, auf dem die App läuft. dekrementieren Sie das AlreadyUsed jedes Mal, wenn die App ausgeführt wird, und speichern Sie sie in der Datei.

  4. die Anwendung läuft Jedes Mal überprüfen, ob die Datei vorhanden ist, wenn nicht verlassen, wenn ja dann die uid die richtigen Hostnamen überprüfen hat und dass die Zahl bereits verwendet wird, ist nicht == 0

Wenn Sie etwas wie JavaWebstart verwenden, wird es auch sehr einfach sein.

Hoffe, dass Ihre Ursache hilft.

0

Geben Sie dem Kunden einen "Schlüssel" und lassen Sie die Software ein kleines Servlet auf Ihrem eigenen Webserver fragen, ob das Produkt für den Kunden mit diesem Schlüssel gültig ist.