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:
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
- Entra en tu portal de cliente y abre la sección Licencias.
- Localiza la licencia de FoxCore. Si ya tenías el motor clásico, es la misma: no hay que comprar nada nuevo.
- Copia la cadena entera. Es larga, tiene tres bloques separados por puntos y no lleva saltos de línea.
- Pégala en tu código como una constante, y pásala a
Activate()al arrancar. - Comprueba que quedó bien:
Activate()devuelve.T.yIsLicensedtambié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.
Activate() al arranque de tu aplicación. Ni la superficie COM ni el comportamiento del motor cambian en nada más.El modelo
| Regla | Qué significa |
|---|---|
| 299 €, pago único | Un 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 empresa | No 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 offline | No hay ninguna llamada de red. Se comprueban firma, producto y vencimiento, y la clave pública va empotrada en Nexum.dll. |
| Perpetua | La 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ásico | El 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.
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():
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/foxcoreComprobarlo desde el IDE
Cuatro líneas en la ventana de comandos de VFP:
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.licque copiar abin\ni a ninguna otra carpeta. - El instalador ya no tiene página de licencia, y la instalación desatendida ya no acepta
/LIC=. verify.cmdya 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.
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íntoma | Causa | Solució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 bloque | Vuelve a copiarlo entero del portal. Son tres bloques separados por puntos, sin espacios |
Activate() devuelve .F. con un JWT entero | Es la licencia de otro producto, o es una licencia de prueba ya caducada | Comprueba en el portal que sea la de FoxCore y que esté vigente |
Las tareas nacen Failed y hablan de licencia | El motor arrancó con un Activate() que devolvió .F. | Comprueba el valor que devuelve Activate() en vez de llamarlo y seguir |
Attach() lanza RUNTIME_BAD_STATE | No 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 actualizar | Es el cambio de 3.4.0: la licencia se exige también fuera del IDE | Añade Activate() al arranque de tu aplicación |
Siguiente: Primeros pasos ->