2010-01-27 11 views
5

He hecho un pequeño programa de demostración que quiero entregar a mi cliente para que pueda ejecutarlo 5 veces para verificar su funcionalidad. No es un gran software para el que implemente algunas funciones de clave de serie y haga un software de prueba.¿Cómo evitar que un programa Demo Java sea utilizado regularmente por mi cliente?

Quiero una solución simple que puede restringir el uso del programa más de 5 veces o que puede eliminarse después de su límite de umbral.

Una solución vino en mi mente. Realizo 4 archivos .txt a través del mismo programa y los almaceno en diff. las ubicaciones en la computadora del cliente y estos archivos almacenan la cantidad de veces que se ejecutó el programa. Cada vez que se inicia la aplicación, comprueba todos esos archivos y si algún archivo contiene el número que representa el límite de umbral, simplemente sale diciendo que se ha alcanzado el límite de umbral.

¿Hay alguna otra solución mejor, pero simple, para evitar que el cliente la use varias veces?

Sería aún mejor si el programa se elimina después de su límite de umbral.

+2

Si el cliente borra esos archivos de texto, puede usar su software hasta la eternidad –

Respuesta

7

Si lo desea realmente hacer más simple, ponga una marca de tiempo y no permiten cliente para ejecutar el código cuando ha expirado el tiempo después de decir cinco días o una semana a partir de hoy

Puede probar a continuación fragmento

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 
} 

Puede consultar here para saber cómo recuperar el tiempo de un servidor de tiempo confiable.

+2

Creo que se puede romper si el cliente vuelve a configurar su reloj cada vez que ejecuta el sript .... ¿No es así? –

+0

Sí, pero puede intentar obtener el tiempo de alguna fuente confiable en Internet –

+0

¿podría decirme cómo recuperar el tiempo de alguna fuente externa? –

3

Considere usar Java Web Start para implementar su software con un archivo JNLP por cliente con una ubicación específica para el cliente, difícil de adivinar. Esto le permite realizar una administración centralizada y eliminar el JNLP cuando se agota el período de tiempo.

También asegúrese de que un recipiente pequeño siempre se guarde en la memoria caché para que el cliente tenga que ponerse en contacto con su servidor para poder ejecutarlo.

+0

¿Puedo convertir mi aplicación independiente a jnlp? Si es así, ¿podría decirme cómo? –

+0

Me gustó su solución y la solución @ Ravi. Acc. para ti, ¿cuál sería la mejor solución? –

+0

El firewall del cliente es algo que debe tener en cuenta, si bloquea el acceso a Internet de su programa, ambas soluciones fallarán :-( –

0

En lugar de 4 archivos, tenga un solo archivo y escriba el número (número de veces que el cliente puede usar la versión de demostración) en el archivo durante la instalación. En cada ejecución, compruebe si el archivo existe, disminuya el número y vuelva a escribir en el mismo archivo.

Si el archivo no se encuentra o el valor es cero, salga del programa.

1

Déjalo probarlo a través de Escritorio remoto o VNC.

+0

Creo que, a menudo, esta es la solución más simple, mantener el programa en la empresa y ahorrarle al cliente los problemas de instalación. – jakobengblom2

1

para aplicaciones de Windows, lo hago de la siguiente manera

creo una clave de registro dentro de mi programa, con la fecha en que se utilizó por primera vez. Esta clave está oculta en un campo nammed con un nombre no sugestivo y el valor encriptado;

También guardo la última fecha en que se usó, para evitar el truco del reloj.

En mi código de validación, cada vez que inicio el programa, comprueba la fecha y la fecha en que se utilizó el programa por primera vez. Si es correcto, también guardo la última vez que se usó el programa. Tenemos 3 casos de validación:

  1. Si la fecha atual es más grande que el tiempo inicial, solapamiento del período de demostración, el programa ya no se utiliza.

  2. Si la fecha de la computadora es más pequeña que la última vez que se usó el programa, el usuario intentó rebobinar el reloj del sistema. Después de esto, el programa ya no se puede usar

  3. El último caso es cuando la fecha del sistema es posterior a la fecha de uso inicial y antes de la fecha de vencimiento. En este caso, se permite el uso del programa.

    // Este código es para el acceso de registro del sistema public static Preferencias userPref = Preferences.userRoot();

    // Escribe el registro userPref.put ("keyName", "value");

    // Lea el registro String read = userPref.get (clave, "0");

+0

Entonces, ¿qué sucede cuando el cliente ejecuta esto en una máquina virtual y antes de ejecutarlo la primera vez crea una instantánea? Cuando el producto caduque, para volver a ejecutarlo, deshaga la instantánea y ejecute N más veces. –

0

Rápidamente esto es lo que creo.

  1. Crear una estructura de datos como

clase {

prop uid = Nombre; prop MaxUsage = 5; prop AlreadyUsed = 5;

}

  1. Implementar esta clase como serializable, escribir este archivo en disco sin el nombre de host, por ejemplo, http://www.java2s.com/Code/Java/File-Input-Output/Serializerclass.htm

  2. Envíe este archivo serializable con la aplicación.

  3. Cuando la aplicación se ejecuta por primera vez, escriba el nombre de propiedad con HOSTNAME del host en el que se ejecuta la aplicación. disminuya el uso de Already cada vez que se ejecuta la aplicación y guárdela en el archivo.

  4. Cada vez que se ejecuta la aplicación compruebe si el archivo está presente, si no salir, si es sí, entonces comprobar el uid tiene el nombre de host correcto y que el número de Utilizado ya no es == 0

Si está utilizando algo como JavaWebstart, será muy fácil también.

Espero que ayude a su causa.

0

Déles una "clave" de cliente y solicite al software que pregunte a un servlet pequeño en su propio servidor web si el producto es actualmente válido para el cliente con esta clave.

Cuestiones relacionadas