IR
irwinrodriguez.dev
Back to docs

Installation

The requirements, the installation, the tree it leaves behind and where the license goes.

FoxServer is digitally signed

Since 0.9.19, FoxServer.Host.exe, FoxServer.Core.dll, SecurityHelper.dll, foxserver.exe and the installer carry a publisher signature in the name of Irwin Alfredo Rodriguez Gimenez, with a timestamp. To see it: right-click the file → Properties → Digital Signatures, or run Get-AuthenticodeSignature in PowerShell, which must say Valid.

  • SmartScreen: the certificate is new and Windows may still warn for a while. If “Windows protected your PC” appears, click More info: it must say Publisher: Irwin Alfredo Rodriguez Gimenez. If it does, Run anyway; if it says “Unknown publisher”, that file is not ours: do not run it.

Before you install

The FoxServer installer is signed, but the certificate is new and Windows may still warn you the first time you run it. Here is what you will see, how to continue, and how to check for yourself that the file you downloaded is exactly the one we published.

The SmartScreen warning

If a blue window saying “Windows protected your PC” appears when you run it, click “More info” and look at the publisher: it must be Irwin Alfredo Rodriguez Gimenez. The warning does not mean there is anything wrong with the file: it means Windows has not yet seen enough downloads with this certificate to recognize it.

  1. Click More info.
  2. Click Run anyway.

Before that second click, check the hash: that is how you know what you are about to run is ours and not an altered copy.

If your antivirus stops it

Some antivirus products quarantine installers they rarely see. If that happens, add an exclusion for the installation folder, C:\Programas\FoxServer, and run it again.

If the antivirus belongs to your company and you cannot change its rules, give the SHA-256 below to whoever administers it: that is what they need to clear the file.

Check what you downloaded

These are the details of the current version and the day it was published. The hash is computed on the file exactly as the portal serves it:

FileVersionPublishedSizeSHA-256
FoxServer-Setup-0.9.38.exe 0.9.38 12 Oct 2026 12.1 MB 82AA0B36A4966292716245811B92787C570087BB8192DBFA8705F78346E8BF54

To check it, open PowerShell in your downloads folder and run:

Computing the SHA-256 of the downloaded file
Get-FileHash -Algorithm SHA256 "$HOME\Downloads\FoxServer-Setup-0.9.38.exe"

If the value matches the table, the file is ours and intact. If it does not match, do not run it: download it again and, if it still does not match, write to soporte@irwinrodriguez.dev.

Hashes are measured again for every published version. If you downloaded an earlier version, its hash will not necessarily match this table.

Requirements

Two things you have to provide, and both stop start-up if they are missing: the .NET 10 runtime in x86 and your license.

  • .NET 10 Runtime, x86 variant. FoxServer is 32-bit, and that is not a preference: it loads the Visual FoxPro COM, which is. The x64 runtime does not work even if it is installed, and when the 32-bit one is missing the installer offers to download and install it (since 0.9.27: about 28 MB from Microsoft, with its signature checked before it runs). If you prefer to do it by hand, the direct download is dotnet-runtime-win-x86.exe. It is the plain “.NET Runtime”: neither the ASP.NET Core nor the Desktop one is needed.
  • Windows 10 or later, 32 or 64 bits.
  • On the machine you develop on, the Visual FoxPro 9 SP2 IDE: init, controller-add and build need it. On the machine you serve from it is not needed: the VFP 9 runtimes next to your MTDLL are enough.
  • Administrator to install and to register the service. And an elevated console for build: BUILD MTDLL registers the coclass when it finishes.

Installation

  1. Download the installer. FoxServer-Setup-<version>.exe, from your license detail page in the portal. The file name carries the version, and the one the portal offers you is the one your maintenance entitles you to.
  2. Run it as administrator. It is needed to register SecurityHelper.comhost.dll for COM and to install the Windows service. It writes no environment variable and does not touch the system path: the CLI and the host find their way by looking at their own feet, from the folder they sit in.
  3. Choose the folder. By default C:\Programas\FoxServer. Up to 0.9.34 it was C:\Program Files (x86)\FoxServer, and an upgrade stays in the folder it already had. You can install wherever you like, but do not flatten the tree: if config\ stops sitting next to bin\, start-up dies at the license gate without saying that the layout was the problem.
  4. Leave the service box ticked. It comes ticked, and on a clean machine that is what you want. If the machine already had the service and you installed into a different folder, installing does not replace it: fix it with sc config FoxServer binPath= "<new>\bin\FoxServer.Host.exe --service".
  5. Copy your license. To config\foxserver.lic, inside the folder you chose. It does not travel in the installer and it cannot: a JWT carries a holder and an email, and it is issued per customer.

Unattended mode

For deploying it through a management tool. /LIC is ours and copies the license into config\; the other three are Inno Setup's. Unattended, no dialog opens and the final check is not run: do it afterwards with verify.cmd.

FoxServer-Setup-0.9.38.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART ^
    /LIC="C:\ruta\foxserver.lic"

The one thing that still blocks an unattended install is a missing .NET 10 x86 runtime: there it stops without asking, on purpose, because a server may have no internet access. If it has, add /DOTNET=descargar and it downloads and installs it.

If you already had FoxServer installed

With the installer there is nothing to do: it stops the service and starts it again at the end if it was running. If you unzip over the top instead, stop the service first (net stop FoxServer): while it runs it holds FoxServer.Host.exe and its DLLs open, and the copy fails on those files.

The demo (since 0.9.28)

The installer has a checkbox, ticked, that installs a demo and opens it in the browser when it finishes: http://127.0.0.1:8099/, a shop with DBF data served as a REST API and as a web page, with the VFP code that produces each result alongside it. It works without a license: without config\foxserver.lic, FoxServer serves only the demo, and only to this machine. It lives in demo\; to switch it off, set "active": false in config\servers\foxserver-demo-api.json and foxserver-demo-web.json. Unattended installs skip it unless you pass /DEMO=1.

The tree, which is part of the contract

<raiz de la instalacion>\        por defecto C:\Programas\FoxServer\
  bin\          el host. LA RAIZ ES LA CARPETA PADRE DE ESTA
    FoxServer.Host.exe          el servidor
    FoxServer.Core.dll
    SecurityHelper.comhost.dll  se registra con el regsvr32 de 32 bits
    Interop.vfp9.dll
    vfpTemplate.txt             obligatorio si hay algun sitio "web"
    Nexum.dll  Newtonsoft.Json.dll  System.Management.dll  ...
  config\       foxserver.lic + servers\*.json (un manifiesto por servidor)
  logs\         FoxServer_<fecha>.log, uno por dia, partido a 10 MB
  cli\          foxserver.exe: crear y compilar proyectos sin abrir el IDE
  ide\          FoxForge.APP + providers\web\: el taller, dentro del IDE de VFP
  ejemplos\     los ejemplos de la guia, ejecutables
  tools\        requisitos, inventario y verificacion
  foxforge.cmd  abre FoxForge en el IDE de VFP 9
  install.cmd   comprueba, inventaria y verifica de verdad
  verify.cmd    la verificacion sola

The license

You download it from the portal, on the license detail page. The email you get says it is ready: it does not carry the file as an attachment. Copy it to config\foxserver.lic, inside the folder you installed into. The server looks for it next to the bin\ it starts from. Without it the host starts and stops at the gate: it serves nothing.

Check which kind your license is A Developer license rejects with 403 any request that does not come from 127.0.0.1. If you are going to call from another machine on the network, you need a Runtime one. This is the number one misunderstanding: it looks like a permissions problem and it is the license. The details are in Licensing.

Checking that it works

The most thorough way is install.cmd, which checks the requirements, takes an inventory of what is declared and really verifies: it starts the server, makes an HTTP request to it and shuts it down, stopping at the first failure. By hand:

cd "C:\Programas\FoxServer\bin"
FoxServer.Host.exe

You should see something like this:

2026-09-20 09:15:02.114 INFO  FoxServer 0.9.38, console mode
2026-09-20 09:15:02.201 INFO  VFP pool: 2 STA threads, timeout 120 s, queue 16, admission slots 50 (defaults)
2026-09-20 09:15:02.203 INFO  License: Runtime, Tu Empresa, S.L., 1 seat(s), maintenance until 2027-01-15 (active)
2026-09-20 09:15:02.350 INFO  salesapi: docs at GET /openapi.json and GET /docs
2026-09-20 09:15:02.402 INFO  salesapi [api] listening on http://127.0.0.1:8099/
2026-09-20 09:15:41.870 INFO  GET /api/customers 200 26 ms  salesapi  127.0.0.1

If something goes wrong

What you seeWhat it isWhat to do
The installer stops mentioning .NETThe 32-bit .NET 10 runtime is missing and the download was declined (or it ran unattended). The x64 one does not countRun it again and accept the download, or install the x86 runtime by hand
403 from another machine, while the same call works locallyThe license is a Developer oneServing other machines needs a Runtime license
The host starts and serves nothing (or only the demo)config\foxserver.lic is missing, or the tree was flattened and config\ is not next to bin\Copy the license into config\ and leave the tree as it came out of the ZIP
500 on a web sitebin\vfpTemplate.txt is missingReinstall or restore that file: it is mandatory as soon as there is a web site
"No servers could be started"No manifest in config\servers\ could come up: a missing DLL, a taken port or a wrong pathLook at logs\FoxServer_<date>.log: it says which one and why
/docs comes up blankSwagger loads its interface from a CDN and the machine has no internetIt is not a server failure; /openapi.json still works
The port is takenAnother service holds itChange port in the server manifest, in config\servers\

Next: Quick Start →