IR
irwinrodriguez.dev
Volver a documentación

Licencias

La licencia de FoxCore es un JWT y se activa por código: se la pasas a Activate() al arrancar tu aplicación. No hay ningún fichero que copiar a ninguna carpeta.

Activar la licencia

Ésta es la forma completa, y es la misma en el IDE y en el .exe que tú distribuyes:

Activar la licencia al arrancar la aplicación
LOCAL loRt, lcJwt

* Tu licencia de FoxCore, tal cual sale del portal. Una sola linea.
lcJwt = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9." + ;
        "eyJzdWIiOiJGb3hDb3JlIiwia2luZCI6IkRldmVsb3BlciIsLi4ufQ." + ;
        "TU-FIRMA-AQUI"

loRt = CREATEOBJECT("FoxCore.Runtime")

IF !loRt.Activate(lcJwt)
    MESSAGEBOX("La licencia de FoxCore no es valida.", 16, "FoxCore")
    RETURN
ENDIF

loRt.Attach(_VFP)
? loRt.IsLicensed                 && .T.
Activate() recibe el contenido del JWT, nunca una ruta. Lo normal es tenerlo como una constante en tu código, porque viaja dentro del ejecutable que entregas a tu cliente.

De dónde sale el JWT

  1. Entra en tu portal de cliente y abre la sección Licencias.
  2. Localiza la licencia de FoxCore. Si ya tenías el motor clásico, es la misma: no hay que comprar nada nuevo.
  3. Copia la cadena entera. Es larga, tiene tres bloques separados por puntos y no lleva saltos de línea.
  4. Pégala en tu código como una constante, y pásala a Activate() al arrancar.
  5. Comprueba que quedó bien: Activate() devuelve .T. y IsLicensed también.

Qué cambió en 3.4.0

Hasta la versión 3.3.0 la licencia sólo se validaba con el host en el IDE de Visual FoxPro (_VFP.StartMode = 0), y el producto era royalty-free en tiempo de ejecución. Desde 3.4.0 se exige también en el .exe o la .dll que tú distribuyes.

Si vienes de 3.3.0, esto es lo único que tienes que hacer: añadir la llamada a Activate() al arranque de tu aplicación. Ni la superficie COM ni el comportamiento del motor cambian en nada más.

El modelo

ReglaQué significa
299 €, pago únicoUn solo precio. No hay tramos de 1, 4 u 8 asientos: se retiraron el 12-09-2026. Las licencias emitidas antes siguen valiendo tal cual.
Una licencia por empresaNo se cuentan puestos ni instalaciones. El mismo JWT vale en todas las máquinas donde corra tu aplicación, y en las de todo tu equipo.
Validación offlineNo hay ninguna llamada de red. Se comprueban firma, producto y vencimiento, y la clave pública va empotrada en Nexum.dll.
PerpetuaLa versión que compras funciona para siempre. El mantenimiento da acceso a versiones nuevas; cuando vence, la que tienes sigue funcionando.
Compartida con el motor clásicoEl producto es FoxCore, el mismo que WinFx.FoxCore. Una licencia sirve para las dos líneas.

Qué pasa sin licencia

Depende de cuál de las dos cosas te falte, y no son la misma. Si llamas a Activate() con un JWT inválido o caducado, devuelve .F., el ciclo de vida sigue funcionando (Attach, Ping, Shutdown) y las tareas nacen Failed diciendo por qué: no hay modo degradado silencioso y nada se rompe a mitad de ejecución, la tarea se rechaza al encolarse. Si no llamas a Activate() en absoluto, no llegas a las tareas: Attach() lanza RUNTIME_BAD_STATE en el acto. Falla ahí a propósito: saltarse un paso del ciclo de vida es un error tuyo, no un veredicto sobre tu licencia, y se dice en la línea que lo causa y no media hora después.

Una tarea lanzada sin licencia válida
lcId = loRt.RunScript("RETURN 1", "una tarea")

? loRt.GetState(lcId)             && Failed
? loRt.GetError(lcId)

El código de error es RUNTIME_LICENSE_INVALID, y lo devuelve GetError():

El error de la tarea rechazada
FoxCore.Runtime: no hay una licencia valida para el producto 'FoxCore', asi que la tarea no se ejecuta. Activala por codigo al arrancar: loRt.Activate(<tu JWT>). Se consigue en https://irwinrodriguez.dev/products/foxcore

Comprobarlo desde el IDE

Cuatro líneas en la ventana de comandos de VFP:

Comprobar la licencia desde la ventana de comandos
loRt = CREATEOBJECT("FoxCore.Runtime")
? loRt.Ping()                     && FoxCore.Runtime 3.4.2
? loRt.Activate(lcJwt)            && .T.
? loRt.IsLicensed                 && .T.

Lo que ya no existe

Si vienes de la documentación de 3.3.0 o anterior, esto ya no es cierto:

  • No hay fichero foxcore.lic que copiar a bin\ ni a ninguna otra carpeta.
  • El instalador ya no tiene página de licencia, y la instalación desatendida ya no acepta /LIC=.
  • verify.cmd ya no busca ninguna licencia: comprueba el registro, que es lo que le toca a una instalación.
  • El producto ya no es royalty-free en tiempo de ejecución.
La demo y los ejemplos del paquete sí leen un foxcore.lic del disco. Eso es una comodidad de ellos: son .prg sueltos que ejecutas a mano desde el IDE y tienen que sacar el JWT de algún sitio. En tu aplicación va en el código.

Si algo no cuadra

SíntomaCausaSolución
Activate() devuelve .F.El JWT está incompleto; lo más común: se copió con un salto de línea en medio o le falta el último bloqueVuelve a copiarlo entero del portal. Son tres bloques separados por puntos, sin espacios
Activate() devuelve .F. con un JWT enteroEs la licencia de otro producto, o es una licencia de prueba ya caducadaComprueba en el portal que sea la de FoxCore y que esté vigente
Las tareas nacen Failed y hablan de licenciaEl motor arrancó con un Activate() que devolvió .F.Comprueba el valor que devuelve Activate() en vez de llamarlo y seguir
Attach() lanza RUNTIME_BAD_STATENo se llamó a Activate(), o se llamó después de Attach()Activate() va primero, siempre. Con el JWT como cadena: no hay ningún fichero que leer
Funcionaba en 3.3.0 y dejó de funcionar al actualizarEs el cambio de 3.4.0: la licencia se exige también fuera del IDEAñade Activate() al arranque de tu aplicación
Comprar por 299 € →

Siguiente: Primeros pasos ->