valega.com/es
AVLock SIMPLE Ayuda en linea
Introducción
Que es AVLock SIMPLE?
Como adquirir AVLock SIMPLE?
Usando AVLock SIMPLE
Como instalar AVLock SIMPLE?
Claves de Registración (Keys)
Configuración
Usuarios e Instancias
Esquemas de protección
Ejemplos
Ejemplo 1
Ejemplo 2
Ejemplo 3
Ejemplo 4
Ejemplo 5
Ejemplo 6
Ejemplo 7
Ejemplo 8
Propiedades
Métodos
El Online License Manager (OLM)
Como's
La utilidad RegMonitor
La Utilidad KeyGen
La Utilidad CodeCheck
La Utilidad KeyCheck
Información adicional
Historia de versiones
Acuerdo de licencia

Ejemplo 1

Top  Previous  Next

EJEMPLO 1

 

Items

En este ejemplo aprenderá a

Esquemas de protección

Diagrama de flujo

Obtener el estado de registración

Controlar el numero de instancias simultaneas

Valores por defecto de las propiedades

Breve práctica con el ejemplo 1a

Iniciar el periodo trial

Borrar la registración existente

Registrar aplicación utilizando claves

Controlar la fecha del computador

El ejemplo 1b

 

 

En este ejemplo aprenderá a:

1. Utilizar el componente AVLock SIMPLE en un esquema básico de protección (esquema A).

2. Controlar el numero de instancias simultaneas.

3. Utilizar dos métodos distintos para iniciar el periodo trial: Fuera de linea y en linea utilizando el OLM básico.

4. Verificar y corregir automáticamente la fecha de su computador.

5. Remover los datos de registración locales y en el servidor (OLM).

6. Utilizar la utilidad KeyGen para generar claves de registración.

 

 

Esquema de protección

Este ejemplo utiliza el esquema A

 

Esquema A

layout01

 

Y lo implementa como se muestra en el siguiente diagrama de flujo:

 

 

 

 

Diagrama de flujo

 

demo01a03

Formulario principal (unit1)

 

procedure TForm1.FormCreate(Sender: TObject);

begin

DoRegister(False);

end;

 

procedure TForm1.DoRegister(force:boolean);

var F : TRegForm;

begin

F:=TRegForm.Create(nil); //Create the registration Form

try

  if AVLockS41.IsLocal and (force or (keydata.DaysLeft < 15)) then F.ShowModal;

finally

  FreeAndNil(F);

end;

end;

 

procedure TForm1.FormPaint(Sender: TObject);

begin

 if (keydata.Status <> Registered) then begin

  showmessage('Not Registered');

  application.Terminate;

end;

if (keydata.TooManyInstances) then begin

  showmessage('Too many instances');

  application.Terminate;

end;

if not AVLockS41.IsLocal and (AVLockS41.activeinstances.count < 2) then begin

  showmessage('This application must be run first from the server.');

  application.Terminate;

end;

end;

 

 

El parámetro boolean "force" en el procedimiento DoRegister determina el comportamiento del procedimiento:

 

procedure TForm1.DoRegister(force:boolean);

 

Además considere la siguiente linea:

 

if force or (F.keydata.DaysLeft < 15) then F.ShowModal;

 

Al ejecutar el procedimiento:

1) Cuando (force=true): el formulario de registración se muestra siempre.

2) Cuando (force=false) solo se muestra si los dias faltantes para expirar son menores de 15.

 Veamos que pasa bajo distintas circunstancias;

 a) Con estado no registrado: el formulario de registración se muestra porque (daysleft = 0).

 b) Con estado registrado trial o temporal:

    - cuando los días restantes sean mayores o igual a 15 el formulario no se muestra (daysleft >= 15).

    - cuando los días restantes sean menores de 15 el formulario se muestra (daysleft < 15).

 c) Con estado registrado permanente: el formulario no se muestra al ser daysleft mayor que 15 (daysleft = 65535).

 

Desde FormCreate se ejecuta con (force=false) DoRegister(False); para que el formulario no se muestre cuando no es necesario porque la aplicación ya está registrada o queda mucho tiempo para expirar el periodo autorizado, pero desde el botón [Registration Form] se ejecuta con (force=true) DoRegister(True); para forzar a que el formulario se muestre siempre sin importar el estado de registración.

 

La versión (1a) es la versión de desarrollo donde se agregaron botones utilitarios para iniciar el periodo trial y para borrar los datos de registración a fin de tener nuevamente la  aplicación en estado original.

La versión (1b) es la versión definitiva donde el periodo trial se inicia automáticamente y se retiraron los botones utilitarios.

 

Obtener el estado de registración

 

Lo primero que se hace en esta unidad es definir dos directivos al compilador que permitirán configurar la aplicación:

 

{$DEFINE SAN} //Options are NAS, SAN, REMOV

            // NAS = Network Attached Storage

            // SAN = Storage Area Network

            // REMOV = Removable Disk

 

{$DEFINE BASIC_OLM} //Options are BASIC_OLM, ADVANCED_OLM, NO_OLM

 

El método GetRegStatus de la unidad Regist permite obtener el estado actual de registración del componente. Abajo puede ver su código fuente.  Primero se asignan las propiedades del componente de acuerdo a los directivos definidos, las propiedades tienen valores por omisión preestablecidos (puede verlos en una tabla abajo. Solo sería necesario asignar los valores que no coinciden con los preestablecidos, en nuestro caso asignamos todas las propiedades pero Ud. podría asignar solo las necesarias en sus aplicaciones.

 

Se utiliza el método GetKeyData de AVLock para leer los datos de registración locales y asignarlos al registro 'keydata' de tipo TKeyData  definido en las sección "interface" de la unidad unit1.

Después se asigna el cuadro de edición EdIcode con el Installcode obtenido de la máquina y seguidamente en una estructura case se prepara el mensaje del estado de registración a mostrarse en la parte superior del formulario de registración y se lo asigna al caption del label lstatus.

 

Este método GetRegStatus es llamado con el evento OnCreate y al final de cada sección de código que haga cambios en el estado de registración, como ser en BtnRegClick(), BtnRemoveClick(), BtnTrialClick() y BtnTrialOlmClick().

 

 

procedure TRegForm.GetRegStatus;

var s:string;

begin

AVLock:= Form1.AVLockS41;

with avlock do begin

{$IFDEF NAS}

     RegPath := CommonDocuments;

     RegFolder := 'example1';

     InstancesCtrl := False;

{$ENDIF}

 

{$IFDEF SAN}

     RegPath := ExeDir;

     RegFolder := '';

     InstancesCtrl := True;

{$ENDIF}

 

  {$IFDEF REMOV}

     RegPath := ExeDir;

     RegFolder := '';

     InstancesCtrl := False;

     RemovableDisk := True;

{$ENDIF}

 

  EncryptionKey := 'abc123';

  EncryptionKey2 := 'xyz321';

  AppID := 12301;

  AppName := 'MyApp';

  AppVersion := '1.0.0';

  WebHost := 'www.av-soft.com';

  TimeHost:= 'time-a.nist.gov';

  OlmPath := '/olm4';

  OlmBasicScript := 'basicolm.php';

  OlmAdvScript := 'advancedolm.php';

  V32Compat := False;

end;

AVLock.GetKeyData(0,keydata);

EdIcode.Text := AVLock.InstallCode;

s:='';

case keydata.Status of

  Unregistered: s:='Not registered';

  Moved       : s:='Moved to another computer';

  Expired     : s:='Expired';

  Registered  : begin

    s:='Registered ';

    case keydata.KeyType of

      Trial     : s:=s+inttostr(keydata.Days)+' days trial - '+inttostr(keydata.DaysLeft)+' days left.';

      Temporal  : s:=s+inttostr(keydata.Days)+' days license - '+inttostr(keydata.DaysLeft)+' days left.';

      Permanent : s:=s+'(Permanent no time limit)';

    end;

  end;

end;

lstatus.caption:=s;

end;

 

 

 

Valores por defecto de las propiedades

 

El componente inicializa sus propiedades con los siguientes valores:

 

Propiedades

Valores por omision

Detalle

EncryptionKey

'abc123'

Clave de encriptación usada para las claves y demás datos de registración.

EncryptionKey2

'xyz321'

Clave de encriptación usada para encriptar los datos que se envían y reciben del sitio web.

AppID

12345

Numero identificador de la aplicación.

RemovableDisk

False

Hacer True para aplicaciones portables.

AppName

'MyApp'

Nombre de la aplicación.

AppVersion

'1.0.0'

Versión de la aplicación.

WebHost

'www.av-soft.com'

url del sitio web donde se instaló el OLM.

TimeHost

'time-a.nist.gov'

url del servidor de tiempo que permite manejar en linea la fecha y hora actuales.

InstancesCtrl

False

Si es True se controla el numero de instancias ejecutadas simultaneamente.

RegPath

CommonDocuments

Ubicación dentro del disco local donde se guardan los datos de registración. Asigne (RegPath=Other) para poder especificar su propia ubicación.

RegFolder

'avlocks4'

Nombre de la carpeta donde se guardarán los datos de registración. Asigne (RegPath=Other) y (RegFolder='') para que los datos de registración y de control de instancias se guarden en la carpeta de la aplicación. Esto es necesario para controlar las instancias dentro de una red. Vea el ejemplo 1.

OlmPath

'/olm4'

Ubicación dentro del hosting donde se instaló el OLM.

OlmBasicScript

'basicolm.php'

Nombre del script administrador de claves del OLM básico.

OlmAdvScript

'advancedolm.php'

Nombre del script administrador de claves del OLM avanzado.

V32Compat

False

Compatibilidad con versiones anteriores 3.x. True para  actualizar una aplicación existente sin que sus usuarios registrados tengan que registrarse de nuevo. Se mantendrá el mismo Installcode que en la versión anterior.




Antes de utilizar el componente se deben asignar las propiedades de acuerdo a su propia configuración. Solo necesitará asignar aquellas que sean distintas a las que vienen asignadas por defecto, al menos debería asignar con valores distintos las siguientes propiedades: EncryptionKey, EncryptionKey2 y AppID, y si tiene instalado el OLM en su propio servidor también las propiedades WebHost, y OlmPath.

 

 

Controlar el numero de instancias concurrentes

El campo Instances determina el número de instancias simultaneas permitidas en el computador. Para permitirlo debe asignar (InstancesControl=True). Opcionalmente podrá manejar las instancias dentro de una red asignando (RegFolder='') y (RegPath=Other), de esta manera el ficheros *.avr que guardan los datos de registración y el fichero *.avc que permiten controlar el numero de instancias concurrentes se guardarán en la misma carleta de la aplicación. Recuerde que Windows Vista no permite escribir bajo la carpeta "Archivos de programa", por lo tanto probablemente deberá utilizar otra carpeta para instalar su aplicación. Cuando el número de instancias sobrepasa el numero permitido, el campo TooManyInstances se hace igual a True.

Este ejemplo tiene el botón [Instances running] en el formulario principal. Este llama al siguiente código:
 

procedure TForm1.BtnUsersClick(Sender: TObject);

var s:string;

   i:integer;

begin

AVLockS41.Refresh;

s:='There are active '+inttostr(AVLockS41.activeinstances.count)+' of '+

inttostr(keydata.Instances)+' allowed instances'+#13#10

+'----------------------------------------------------------'+#13#10;

for i:=0 to AVLockS41.activeinstances.count -1

do s:=s+AVLockS41.activeinstances[i]+#13#10;

   s:=s+'----------------------------------------------------------';

showmessage(s);

end;

 

Allí verá información sobre las instancias que se están ejecutando en ese momento. También considere el siguiente código desde el evento OnPaint:

 

Este código termina la aplicación si no está registrada.

 

if (keydata.Status <> Registered) then begin

  showmessage('Not Registered');

  application.Terminate;

end;

 

Este código termina la aplicación si se sobrepasa el número de instancias permitidas.

 

if (keydata.TooManyInstances) then begin

  showmessage('Too many instances');

  application.Terminate;

end;

 

Este código termina la aplicación si se intenta iniciar la primer instancia desde una terminal. Esta limitación se establece por razones de seguridad. Tema relacionado: Problema de seguridad.

 

if not AVLockS41.IsLocal and (AVLockS41.activeinstances.count < 2) then begin

  showmessage('This application must be run first from the server.');

  application.Terminate;

end;

 

 

 

Breve práctica con el ejemplo 1a

 

Desde el IDE de Delphi Abra el ejemplo 1a (\Examples\1\a)

 

demo01a04

 

Ejecutar la aplicación

Presione el botón runbutton o F9 para iniciar la ejecución del programa. En unos instantes podrá ver el formulario de registración:

 

demo01a05

 

Note que el estado corriente de registración es "Not registered" (No registrado). Esto es debido a que se ejecutó por primera vez el programa y en las versiones (a) de desarrollo no se inicia automáticamente el periodo trial.

 

Si el estado es no registrado, al hacer click sobre el botón [Continue >>] la aplicación terminará de ejecutarse y no podrá acceder al formulario principal "MAIN FORM".

 

 

 

Iniciar el periodo trial

 

Item relacionado: Como iniciar el periodo trial

 

Por ahora veremos como hacerlo en forma manual utilizando los botones provistos para este efecto, después en la versión (b) veremos como hacerlo en forma automática al iniciar la aplicación.

Haga click sobre el botón [Start Trial ]. El código asociado a este botón puede verse más abajo:

 

procedure TRegForm.BtnTrialClick(Sender: TObject);

var res:string;

  err:integer;

begin

if (keydata.Status = Unregistered) then

begin

  res:='';

  {$IFDEF NO_OLM}

                //(index,users,inst,startdate,days,values)

    err:=AVLock.MakeTrial(0,1,2,date,30,'000');

    if (err=0) then res:='00';

  {$ENDIF}

  {$IFDEF BASIC_OLM}

                //values, kind, Index, days, inst)

    res := AVLock.OnlineGetKeyB('000',0,0,30,1);

  {$ENDIF}

  {$IFDEF ADVANCED_OLM}

                //(index,users,inst,days,values)

    res := AVLock.OnlineStartTrial(0,1,1,30,'000');

{$ENDIF}

 

  if (res='00') then begin

    showmessage('Trial started or synchronized successfully.');

    GetRegStatus;

  end else showmessage('Failed to start the trial period. Please review your internet connection and try again.');

end else if (keydata.KeyType = Trial) then showmessage('Trial already started.')

else showmessage('Application already Registered.');

end;

 

 

Tenemos tres alternativas para iniciar el periodo trial:

a) Método fuera de linea. Utilizando el método MakeTrial().

b) Método en linea. Utilizando el OLM básico. El ejemplo está configurado para acceder al script basicolm.php del sitio www.av-soft.com que podrá utilizar para hacer las prácticas.

c) Método en linea. Utilizando el OLM avanzado. El ejemplo está configurado para acceder al script basicolm.php del sitio www.av-soft.com que podrá utilizar para hacer las prácticas.

 

Cambiando el siguiente directivo al compilador

{$DEFINE BASIC_OLM} //Options are BASIC_OLM, ADVANCED_OLM, NO_OLM

podrá probar las tres opciones. Le sugerimos que antes de intentar con un nuevo directivo elimine los datos de registración existentes con el botón [Remove Registration]

 

 

Después de presionar el botón [Start Trial] verá el siguiente cuadro de mensaje informando el resultado de la operación, "Trial iniciado" :

 

demo01a06

 

Además podrá ver que el estado corriente de registración ha cambiado mostrando el mensaje que puede ver abajo:

 

demo01a07

 

Si ahora hace click sobre el botón [Continue >>] pasará al formulario principal de la aplicación:

 

demo01a08

Aquí tiene el botón [Registration Form] que le permitirá acceder al formulario de registración estando en modo registrado, dado que este ya no surgirá automáticamente al iniciar el programa, sino que pasará directamente al formulario principal. Cierre la aplicación y ábrala nuevamente y podrá comprobarlo.

 

Borrar la registración existente

 

Los datos de registración siempre se guardan en el computador donde se registra la aplicación (Datos Locales) y si el usuario tiene conexión a internet posiblemente también estén guardados en el sitio web (Datos en Linea). Cómo vimos en el apartado anterior, el modo en que se realiza la registración depende del valor que tenga el directivo siguiente:

{$DEFINE BASIC_OLM} //Options are BASIC_OLM, ADVANCED_OLM, NO_OLM

en este caso definido para utilizar el OLM básico.

 

Si Ud. inició el periodo trial con el directivo {$DEFINE NO_OLM} se habría ejecutado el método MakeTrial al iniciar el periodo trial y los datos estarían guardados solo en el computador y si lo inició con el directivo {$DEFINE BASIC_OLM} o {$DEFINE ADVANCED_OLM}, los datos deberían haberse guardado en ambos lugares; su computador y en el sitio web.  Vea abajo el código que se ejecuta según sea el directivo definido:

 

 

procedure TRegForm.BtnRemoveLocalClick(Sender: TObject);

var ok:boolean;

  s,msg:string;

begin

if AVLock.EraseReg

then msg:= 'Local registration data removed'+#13#10

else msg:= 'Could not remove Local registration data'+#13#10;

ok:=False;

{$IFDEF BASIC_OLM}

  ok:= AVLock.OnlineRemoveKey(0); //remove regitration data from the Basic OLM

{$ENDIF}

{$IFDEF ADVANCED_OLM}

  s:= AVLock.OnlineRemoveReg(0); //remove regitration data from the Advanced OLM

  ok:= ((s='00') or (s='11'));

{$ENDIF}

if ok then msg:=msg+'Online registration data removed'

else msg:=msg+'Could not remove Online registration data';

showmessage(msg);

GetRegStatus;

end;

 

 

Entre al formulario de registración con el botón [Registration Form] y borre la registración con el botón [Remove Registration]. Verá el siguiente mensaje informandole del resultado de la operación:

 

demo01a09

 

Ahora al hacer click sobre el botón [Continue >>] terminará la ejecución del programa, volviendo a la situación inicial.

 

Si Ud. inició el periodo trial teniendo definido el directivo {$DEFINE BASIC_OLM} el resultado en apariencia será el mismo que cuando lo hizo con el directivo {$DEFINE NO_OLM}, aparentemente el mismo ya que si deja pasar algunos días al borrar manualmente los datos locales de registración o hacerlo con el método EraseReg e iniciar nuevamente el periodo trial,  el periodo trial no se reiniciará sino que permanecerá en la situación anterior. Por ejemplo, si ya pasaron 8 días y el mensaje del estado de registración es como se muestra abajo:

 

demo01a10

 

al borrar la registración y reiniciarla con el botón [Start Trial] el estado de registración seguirá siendo el mismo, (22 dias para terminar). Esto ocurre porque los datos de registración no se han borrado en el servidor web, solo se borraron los datos locales y son reestablecidos con los mismos valores anteriores obtenidos desde el sitio web. Como puede comprobar este método es realmente seguro.

 

La unica forma de reestablecer el periodo trial con este método es borrando el fichero correspondiente en el servidor. Los métodos OnlineRemoveKey y OnlineRemoveReg eliminan los datos de registración en el sitio web por lo tanto no deberá permitir que el usuario pueda acceder a estas utilidades en la versión definitiva de su aplicación, si está utilizando en su aplicación un panel de utilidades como el de este ejemplo, remuevalo en la versión definitiva como nosotros lo hacemos en la versión 1b.

 

No se preocupe pensando que tal vez un usuario pueda descargar el paquete de AVLock SIMPLE y teniendo el código fuente de los ejemplos pueda llegar a utilizar estos métodos para burlar la seguiridad de su aplicación, esto no es posible ya que para hacerlo debería conocer el AppID y las claves de encriptación que Ud. está utilizando.  

 

Vea abajo como se guardan los datos de registración en el OLM básico.

 

demo02a03

 

Vea en el ejemplo 6 cómo se guardan los datos de registración con el OLM avanzado.

 

 

Registrar la aplicación utilizando claves de registración

 

Cada vez que Ud. inició el periodo trial internamente se generó y registró una clave de registración. Normalmente el periodo trial se inicia con los dos métodos ya vistos, con MakeTrial() o con el OLM, pero también se puede hacer utilizando una clave de registración.

Vamos a suponer que Ud. no quiere que el periodo trial se inicie automáticamente y le sugiere a los usuarios que le envíen el código InstallCode a fin de generar una clave que les permita iniciar el periodo trial. Este método es muy seguro y no requiere que Ud. utilice el OLM.

 

Para generar la clave utilizamos la utilidad keygen.exe

 

Generemos una clave trial de 50 días como se muestra abajo:

 

demo01a13

 

Introduzcamos la clave generada dentro del formulario de registración y hagamos click sobre el botón [Register].

demo01a14

si no cometió errores deberá recibir un mensaje como el que se ve abajo, con el estado de registración a 50 días.

demo01a15

 

Se pueden generar distintos tipos de claves:

Permanentes: Nunca expiran.

Temporarias: Igual que las claves trial. Pensadas para rentar la aplicación por mes, año, etc.

Trial: Pensada para el periodo inicial de prueba.

Unregister Key: Elimina los datos locales de registración que correspondan al Index utilizado para generar la clave.

Unregister All: Elimina todos los datos locales de registración.

 

 

Controlar la fecha del computador

 

Durante el periodo trial y periodos de claves temporarias existe el riesgo potencial de que el usuario intente atrasar la fecha del computador para utilizar la aplicación por más tiempo que el establecido. Para evitar esto se agregaron los siguientes métodos:

 

GetOnlineDate(): Obtiene desde internet la fecha actual correcta.

FixSystemDate(): Permite modificar la fecha del computador asignandole una fecha dada como parámetro.

OnlineCheckDate(): Internamente utiliza los dos métodos anteriores para obtener de internet la fecha correcta y asignarla al computador. Además guarda la última fecha alcanzada (LastDate) junto con los datos de registración, después cuandop se obtienen el estado de registración con GetKeyData también se lee esta fecha y se la compara con la fecha del computador y si LastDate es mayor a la del computaodor se considera que el usuario ha atrasado la fecha y se marca como True el campo DateBAcked dentro de los datos de la clave (KeyData) obtenidos.

 

Con el botón [Check System Date] se utiliza GetOnlineDate() para obtener la fecha de internet y después se la compara con la fecha local y si no corresponde se pregunta al usuario si desea modificarla y en caso afirmativo se aplica FixSystemDate().

 

Con el botón [Check and Fix System Date] se utiliza OnlineCheckDate() para hacer lo mismo pero sin dar al usuario la posibilidad de aprobar la operación. Este método tiene un parámetro booleano "fix" que si se hace true aplica la correción y en caso contrario no lo hace. Esta opción solo se puede aplicar cuando existen datos de registración locales desde donde lee la fecha guardada LastDate, por eso en el ejemplo se ejecuta unicamente si la aplicación ya está registrada.

 

 

 

El ejemplo 1b

 

El ejemplo 1b es la versión definitiva del programa. Se eliminó la sección de utilidades para el desarrollador (en verde) ya que estas son herramientas que le sirven al programador para ver que el mecanismo de registración esté funcionando correctamente pero que no deben estar en la versión definitiva. Se agregaron los siguientes procedimientos:

 

procedure TRegForm.StartTrial;

begin

if (keydata.Status = Unregistered) then begin

  {$IFDEF NO_OLM}

              //(index,users,inst,startdate,days,values)

   AVLock.MakeTrial(0,1,2,date,30,'007');

  {$ENDIF}

  {$IFDEF BASIC_OLM}

              //values, kind, Index, days, inst)

   AVLock.OnlineGetKeyB('007',0,0,30,1);

  {$ENDIF}

  {$IFDEF ADVANCED_OLM}

              //(index,users,inst,days,values)

   AVLock.OnlineStartTrial(0,1,1,30,'007');

{$ENDIF}

 

  GetRegStatus;

end;

end;

 

procedure TRegForm.FormCreate(Sender: TObject);

begin

GetRegStatus;

StartTrial;

//check and fix system date automatically

if (keydata.KeyType in [Temporal, Trial]) then AVLock.OnlineCheckDate(true);

GetRegStatus;

end;

 

 

En el evento FormCreate se agregaron dos lineas, para crear automáticamente el periodo trial y para controlar si la fecha del computador es correcta. En esta última linea se llama al método OnlineCheckDate(True) y solo se lo hace si el tipo de registración es Temporal o Trial ya que en registraciones permanentes no tiene sentido este control. Al ser True el parámetro ajusta automáticamente la fecha del computador.

 

Otra posibilidad para esta última linea sería:

 

if (keydata.KeyType in [Temporal, Trial]) and not AVLock.OnlineCheckDate(false)

then begin

  showmessage('Your system date seems to be incorrect. Please fix it and try again');

  application.terminate;

end;

 

 

En este caso no se fuerza la actualización de la fecha pero se termina el programa sugiriendo al usuario que haga la correción manualmente.