IR
irwinrodriguez.dev
Back to docs

Installation

FoxBridge is not installed: it is copied. No installer, no COM registration and nothing written to the Windows registry. What you do have to do is copy the whole folder and activate the license.

FoxBridge is digitally signed

Since 1.0.1, FoxBridge.dll, FoxBridgeNE.dll and Nexum.dll (x86 and x64), the tutorial's MiLogica.dll 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 FoxBridge 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.

File downloaded from the internet, and SmartScreen

If Windows complains when you extract or use the files, that is the mark of the web: the .zip came from the internet and Windows flags it as such. And if you run the .bat that registers the components without unblocking it first, SmartScreen (“Windows protected your PC”) may appear as well: there the way out is two clicks, “More info” and “Run anyway”.

  1. Right-click the .zip → Properties.
  2. At the bottom, tick Unblock and confirm.
  3. Extract after unblocking: the other way round, the mark stays on every extracted file.

You can also do it from PowerShell: Unblock-File on the downloaded .zip.

If your antivirus stops it

Some antivirus products quarantine freshly downloaded files. If that happens, add an exclusion for the folder where you keep the FoxBridge files inside your application, because FoxBridge has no fixed installation folder: its files live next to your project.

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
FoxBridge-1.0.1.zip 1.0.1 15 Sept 2026 7.6 MB A37C09B7ACEA26343107D51B015E4A60BE8AA0344BC6B7665C2ADF4CBE59DF1D

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\FoxBridge-1.0.1.zip"

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.

1. Copy the files

From the package, copy FoxBridge.prg and the architecture subfolder into your project, keeping the structure:

MiApp\
  libs\
    FoxBridge.prg              <- la API que usas desde VFP
    x86\                       <- VFP 9 y VFPA x86
      FoxBridgeNE.dll
      FoxBridge.dll
      Nexum.dll
      FoxBridge.runtimeconfig.json
      FoxBridge.deps.json
    x64\                       <- solo si usas VFP Advanced x64

All five files in x86\ are needed. FoxBridgeNE.dll is the way in, but FoxBridge.dll holds the logic, Nexum.dll validates the license and the two .json files tell the .NET runtime what to load. And they have to sit below the folder of the .prg, in x86\: that is where it looks for them. Copying just the DLL "next to the .prg" gives "FoxBridge: FoxBridgeNE.dll not found".

x86 or x64: the process decides, not you VFP 9 is 32-bit, so it uses x86\. The x64\ folder only comes into play with 64-bit VFP Advanced. FoxBridge.prg looks at the architecture of the process and picks on its own; you can ship both folders and forget about it.

2. Check the .NET runtime

FoxBridge needs the .NET 8 or later runtime in the architecture of the process: with VFP 9, the x86 one. And dotnet --version does not tell you that: it shows the SDK, and almost always the 64-bit one. What you want is the list of runtimes:

dotnet --list-runtimes

REM Look for a Microsoft.NETCore.App 8.x (or later) line whose path
REM is the 32-bit one:
REM   C:\Program Files (x86)\dotnet\shared\Microsoft.NETCore.App

If it is not there, install the .NET Desktop Runtime x86 (8 or later) from https://dot.net. With the wrong runtime, initialization fails with an HRESULT and the message tells you which architecture it expected.

3. Initialize and activate

Two lines at application start-up. The second one is not optional: without Activate() nothing works, neither in the IDE nor in the EXE. Any call before activating answers "FoxBridge is not activated".

Create the bridge and activate the license at start-up
LOCAL loBridge, lcKey

* Option A: FoxBridge.prg in the same directory
loBridge = NEWOBJECT("FoxBridge", "FoxBridge.prg")

* Option B: with the full path
* loBridge = NEWOBJECT("FoxBridge", "C:\MyApp\libs\FoxBridge.prg")

* Option C: with SET PROCEDURE TO, once at start-up
* SET PROCEDURE TO "C:\MyApp\libs\FoxBridge.prg" ADDITIVE
* loBridge = NEWOBJECT("FoxBridge")

* The key is your license JWT. Activate() returns .F. if it is not
* valid and leaves the reason in GetLastError(); it does not raise a
* VFP ERROR.
lcKey = MySystem_GetLicense()
IF !loBridge.Activate(lcKey)
    MESSAGEBOX("FoxBridge license not valid: " + ;
               loBridge.GetLastError(), 16, "FoxBridge")
    RETURN .F.
ENDIF
The license is always required In the IDE and in the compiled EXE alike. The check sits at the start of all fifty entry points of the engine, so without activating you cannot even create a StringBuilder. Keep the JWT wherever you keep your secrets and hand it to Activate(); FoxBridge does not read it from any file on its own.

4. Check that it loaded

With the bridge activated, either of these two lines confirms it:

Check that FoxBridge has loaded
? loBridge.Version()
&& FoxBridge Runtime 1.0.0 / Core ...

? loBridge.TypeExists("System.Text.StringBuilder")
&& .T.

Next: Quick Start ->