Install on Windows

This page installs Mugnsoft components as Windows services. One PowerShell script does everything for a component: download, signature check, configuration, firewall rule, service installation, registration with the Webserver and start. The manual steps it automates are listed below it.

Before you start

  • Windows 10 / 11 or Windows Server 2016 and later, 64-bit, and an elevated PowerShell (right-click → Run as administrator).
  • To verify the packages: gpg, which comes with Git for Windows or Gpg4win. The script finds either one.
  • The network flows below open in your firewalls (the script adds the Windows Firewall rule of the host it runs on). Every component listens on its own API port, and the Webserver connects back to it:
From To Port (default) Why
Users’ browsers Webserver TCP 9090 (PortWEB) Web UI
Monitors, Integrators, Sentinel Agents Webserver TCP 8050 (PortAPI) Registration and data push
Webserver each Monitor / Integrator / Sentinel Agent its port (packages: monitor 8072, integrator 8053, sentinel 8079) The Webserver drives the component
  • Install the Webserver first: every other component needs two values it produces.
  • One component of each kind per host: the service names are fixed (MugnsoftWebserver, MugnsoftMonitor, MugnsoftIntegrator, MugnsoftDiscoveryAgent, MugnsoftWebserverFront).
  • Sentinel Agent: install the Npcap runtime if the host must report network bandwidth (see requirements).

Your values

The commands on this page use these example values. Replace them with yours; everything else is copied as-is.

Value Where it comes from Example (replace it!)
Webserver address IP or DNS name of the Webserver host, as the other hosts reach it 10.0.0.5
Webserver API port PortAPI of webserver.json (default) 8050
_sharedInternal Printed at the end of the Webserver installation (step 1), also in webserver.json 3f9c...e1 (64 hex characters)
License file license_MNS.dat sent by Mugnsoft, one per Webserver and per Integrator, bound to its host .\license_MNS.dat
Location Free text shown on the Webserver (monitor, sentinel) Paris

In an elevated PowerShell, download mugnsoft-install.ps1 onto each host:


Invoke-WebRequest https://doc.mugnsoft.com/materials/mugnsoft-install.ps1 -OutFile mugnsoft-install.ps1 -UseBasicParsing

1. Webserver (first). Put your license_MNS.dat next to the script, then:


powershell -ExecutionPolicy Bypass -File .\mugnsoft-install.ps1 webserver -License .\license_MNS.dat

The end of its output gives what the other hosts need, for example:


Webserver installed in C:\Mugnsoft\webserver
  Web UI:   https://<this host>:9090/   (admin / admin, change it at first login)
  API:      <this host>:8050   -> the -Webserver value for the components
  _sharedInternal (pass it to every component as -SharedInternal):
    3f9c...e1

2. Monitor probe, Integrator, Sentinel Agent, each on its host, with your Webserver address and _sharedInternal:


# monitor probe
powershell -ExecutionPolicy Bypass -File .\mugnsoft-install.ps1 monitor -Webserver 10.0.0.5:8050 -SharedInternal 3f9c...e1 -Location Paris

# Integrator (it has its own license file)
powershell -ExecutionPolicy Bypass -File .\mugnsoft-install.ps1 integrator -Webserver 10.0.0.5:8050 -SharedInternal 3f9c...e1 -License .\license_MNS.dat

# Sentinel Agent
powershell -ExecutionPolicy Bypass -File .\mugnsoft-install.ps1 sentinel -Webserver 10.0.0.5:8050 -SharedInternal 3f9c...e1 -Location Paris

Each run ends with ... installed ... and registered with 10.0.0.5:8050. Then enable the component.

What the script does, in order, stopping at the first problem with a message saying what to fix:

  1. Checks the arguments, that it runs elevated and that the install folder does not exist yet (it never overwrites an installation).
  2. Downloads mugnsoft-<component>-<version>.windows-amd64.zip and its .sig from https://mugnsoft.com/bin/<version>/, and verifies the signature with Mugnsoft’s public GPG key (in a throw-away keyring).
  3. Extracts it to C:\Mugnsoft\<component folder>.
  4. Writes the values into the component’s .json file (and copies the license file).
  5. Adds an inbound Windows Firewall rule Mugnsoft <component> for the component’s port(s).
  6. Runs <component>.exe install: a monitor, Integrator or Sentinel Agent registers with the Webserver at this point, and the service is only created if that succeeds.
  7. Starts the service.
Parameter Default Use
-Version <x.y.z> 4.2.0 Release to install
-Dir <path> C:\Mugnsoft Parent folder of the installation
-Package <file.zip> download Install a package you already have (its .sig must sit next to it)
-NoVerify off Skip the signature check (not recommended)
-Name <name> <component>-<computer name> Component name on the Webserver: letters, digits, hyphens
-Port <port> the package’s Component API port
-Advertise <ip> auto-detected Monitor only: the IP the Webserver must dial to reach the probe (see Check the address)
-WebserverUrl <url> https://<webserver host>:9090 Integrator only: Web UI link used in notifications
-ApiPort, -WebPort 8050, 9090 Webserver only
-FrontPki <dir> — Webserver-Front only, see Install the Webserver-Front
-NoFirewall off Do not add the Windows Firewall rule

Get-Help .\mugnsoft-install.ps1 -Detailed prints the same list.

<#
.SYNOPSIS
  Download, verify, configure, install and start one Mugnsoft component as a
  Windows service, in one command. Run it from an elevated PowerShell.

.EXAMPLE
  .\mugnsoft-install.ps1 webserver -License .\license_MNS.dat
.EXAMPLE
  .\mugnsoft-install.ps1 monitor -Webserver 10.0.0.5:8050 -SharedInternal 3f9c...e1 -Location Paris

.PARAMETER Component
  webserver, monitor, integrator, sentinel or webserver-front.
.PARAMETER Version
  Release to install (default 4.2.0).
.PARAMETER Dir
  Parent folder (default C:\Mugnsoft); the component goes in <Dir>\<package folder>.
.PARAMETER Package
  Install this package (.zip) instead of downloading it.
.PARAMETER NoVerify
  Skip the GPG signature check (not recommended).
.PARAMETER License
  webserver and integrator: the license_MNS.dat received from Mugnsoft.
.PARAMETER ApiPort
  webserver: API port (default 8050).
.PARAMETER WebPort
  webserver: web UI port (default 9090).
.PARAMETER Webserver
  monitor, integrator, sentinel: the Webserver API address, host:port (e.g. 10.0.0.5:8050).
.PARAMETER SharedInternal
  monitor, integrator, sentinel: the "_sharedInternal" value of the Webserver's webserver.json.
.PARAMETER Name
  Component name (default <component>-<computer name>).
.PARAMETER Port
  Component API port (default: the package's).
.PARAMETER Location
  Location shown on the Webserver (monitor, sentinel).
.PARAMETER Advertise
  monitor: IP address the Webserver must use to reach this probe (default: auto-detected).
.PARAMETER WebserverUrl
  integrator: Webserver web UI URL used in notifications (default https://<webserver host>:9090).
.PARAMETER FrontPki
  webserver-front: the front\ folder produced by mugnsoft-front-pki.sh.
.PARAMETER NoFirewall
  Do not add the Windows Firewall rule opening the component's port(s).
#>
[CmdletBinding()]
param(
  [Parameter(Mandatory = $true, Position = 0)]
  [ValidateSet("webserver", "monitor", "integrator", "sentinel", "webserver-front")]
  [string]$Component,
  [string]$Version = "4.2.0",
  [string]$Dir = "C:\Mugnsoft",
  [string]$Package = "",
  [switch]$NoVerify,
  [string]$License = "",
  [string]$ApiPort = "",
  [string]$WebPort = "",
  [string]$Webserver = "",
  [string]$SharedInternal = "",
  [string]$Name = "",
  [string]$Port = "",
  [string]$Location = "",
  [string]$Advertise = "",
  [string]$WebserverUrl = "",
  [string]$FrontPki = "",
  [switch]$NoFirewall
)
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue"   # Invoke-WebRequest is 10x faster without the progress bar
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$BaseUrl = "https://mugnsoft.com/bin"

function Fail($msg) { Write-Host "ERROR: $msg" -ForegroundColor Red; exit 1 }
function Info($msg) { Write-Host "==> $msg" -ForegroundColor Cyan }
# Run a native program and capture stdout+stderr. Windows PowerShell turns every
# stderr line into a terminating error under ErrorActionPreference=Stop, so relax
# it for the call only.
function Native([string]$exe, [string[]]$a) {
  $prev = $ErrorActionPreference; $ErrorActionPreference = "Continue"
  try { $o = & $exe @a 2>&1 | ForEach-Object { "$_" }; $code = $LASTEXITCODE } finally { $ErrorActionPreference = $prev }
  return @{ Out = ($o -join "`n"); Code = $code }
}

# component -> package folder and binary
$pkg = @{ "webserver" = "webserver"; "webserver-front" = "webserver-front"; "monitor" = "monitor";
          "integrator" = "integrator"; "sentinel" = "discovery_agent" }[$Component]
$bin = "$pkg.exe"; $conf = "$pkg.json"
$target = Join-Path $Dir $pkg

# ---- checks, before anything is written -------------------------------------
$admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $admin) { Fail "run this script from an elevated PowerShell (Run as administrator)" }
foreach ($p in @(@("-ApiPort", $ApiPort), @("-WebPort", $WebPort), @("-Port", $Port))) {
  if ($p[1] -and -not ($p[1] -match '^\d+$' -and [int]$p[1] -ge 1 -and [int]$p[1] -le 65535)) { Fail "$($p[0]) must be a port number, got '$($p[1])'" }
}
foreach ($p in @(@("-Location", $Location), @("-Advertise", $Advertise), @("-WebserverUrl", $WebserverUrl))) {
  if ($p[1] -notmatch '^[A-Za-z0-9._:/@+=, -]*$') { Fail "$($p[0]) contains characters that are not allowed: '$($p[1])'" }
}
if ($Component -in @("webserver", "integrator")) {
  if (-not $License) { Fail "-License <license_MNS.dat> is required for the $Component" }
  if (-not (Test-Path $License -PathType Leaf)) { Fail "license file not found: $License" }
}
if ($Component -in @("monitor", "integrator", "sentinel")) {
  if (-not $Webserver) { Fail "-Webserver <host:port> is required (the Webserver API address)" }
  if ($Webserver -notmatch '^[A-Za-z0-9.-]+:\d+$') { Fail "-Webserver must look like host:port, e.g. 10.0.0.5:8050" }
  if (-not $SharedInternal) { Fail "-SharedInternal is required: copy `"_sharedInternal`" from the Webserver's webserver.json" }
  if ($SharedInternal -notmatch '^[A-Za-z0-9._~!#%^*+=-]+$') { Fail "-SharedInternal holds unexpected characters" }
  if (-not $Name) { $Name = "$Component-$($env:COMPUTERNAME.ToLower())" }
  if ($Name -notmatch '^[A-Za-z0-9-]+$') { Fail "-Name may hold letters, digits and hyphens only: '$Name'" }
}
if ($Component -eq "webserver-front") {
  if (-not $FrontPki) { Fail "-FrontPki <dir> is required: the front\ folder made by mugnsoft-front-pki.sh" }
  if (-not ((Test-Path "$FrontPki\config\ssl\certificates\webserver.pem") -and (Test-Path "$FrontPki\webserver-front.json"))) {
    Fail "$FrontPki does not look like the front\ folder of mugnsoft-front-pki.sh" }
}
if (Test-Path $target) { Fail "$target already exists: this script installs, it does not upgrade (see the Upgrade section of the docs)" }

$work = Join-Path $env:TEMP ("mugnsoft-install-" + [guid]::NewGuid().ToString("N"))
New-Item -ItemType Directory $work | Out-Null
try {
  # ---- 1. get the package -----------------------------------------------------
  $file = "mugnsoft-$pkg-$Version.windows-amd64.zip"
  if (-not $Package) {
    Info "Downloading $file"
    try { Invoke-WebRequest "$BaseUrl/$Version/$file" -OutFile "$work\$file" -UseBasicParsing } catch { Fail "download failed: $BaseUrl/$Version/$file" }
    if (-not $NoVerify) { try { Invoke-WebRequest "$BaseUrl/$Version/$file.sig" -OutFile "$work\$file.sig" -UseBasicParsing } catch { Fail "signature download failed" } }
    $Package = "$work\$file"
  } else {
    if (-not (Test-Path $Package -PathType Leaf)) { Fail "package not found: $Package" }
    $Package = (Resolve-Path $Package).Path
    if (-not $NoVerify -and -not (Test-Path "$Package.sig")) { Fail "no $Package.sig next to the package: download it too, or pass -NoVerify" }
  }

  # ---- 2. verify its signature (gpg from PATH, Git for Windows or Gpg4win) ------
  if (-not $NoVerify) {
    $gpg = (Get-Command gpg -ErrorAction SilentlyContinue).Source
    $git = (Get-Command git -ErrorAction SilentlyContinue).Source   # Git for Windows ships gpg in usr\bin
    $fromGit = if ($git) { Join-Path (Split-Path (Split-Path $git)) "usr\bin\gpg.exe" } else { "" }
    foreach ($c in @($fromGit, "$env:ProgramFiles\Git\usr\bin\gpg.exe", "${env:ProgramFiles(x86)}\GnuPG\bin\gpg.exe", "$env:ProgramFiles\GnuPG\bin\gpg.exe")) {
      if (-not $gpg -and $c -and (Test-Path $c)) { $gpg = $c }
    }
    if (-not $gpg) { Fail "gpg not found: install Git for Windows or Gpg4win to verify the package (or pass -NoVerify)" }
    Info "Verifying the GPG signature"
    try { Invoke-WebRequest "$BaseUrl/Mugnsoft_public.key" -OutFile "$work\Mugnsoft_public.key" -UseBasicParsing } catch { Fail "could not download Mugnsoft_public.key" }
    # a throw-away keyring, given as a RELATIVE --homedir: Git's (MSYS) gpg misreads
    # an absolute Windows path there, Gpg4win accepts both
    Push-Location $work
    New-Item -ItemType Directory gnupg | Out-Null
    Native $gpg @("--homedir", "gnupg", "--batch", "--quiet", "--import", "$work\Mugnsoft_public.key") | Out-Null
    $sig = if (Test-Path "$Package.sig") { "$Package.sig" } else { "$work\$file.sig" }
    $ok = (Native $gpg @("--homedir", "gnupg", "--batch", "--verify", $sig, $Package)).Code -eq 0
    Pop-Location
    if (-not $ok) { Fail "SIGNATURE CHECK FAILED for $Package : do not install it" }
    Info "Signature OK"
  } else {
    Write-Host "WARNING: signature not verified (-NoVerify)" -ForegroundColor Yellow
  }

  # ---- 3. extract ---------------------------------------------------------------
  Info "Extracting to $target"
  New-Item -ItemType Directory -Force $Dir | Out-Null
  Expand-Archive $Package -DestinationPath "$work\x"
  if (-not (Test-Path "$work\x\$pkg")) { Fail "unexpected package layout: no $pkg\ folder inside" }
  Move-Item "$work\x\$pkg" $target
  Set-Location $target
  if (-not (Test-Path $conf)) { Fail "$conf missing from the package" }

  # set "key": "value" in a flat JSON file, adding the key when it is absent;
  # written back as UTF-8 WITHOUT BOM (a BOM makes the JSON unreadable to the component)
  $script:text = [IO.File]::ReadAllText("$target\$conf")
  function SetKey($key, $val) {
    $re = '("' + [regex]::Escape($key) + '"\s*:\s*)"[^"]*"'
    if ($script:text -match $re) { $script:text = [regex]::Replace($script:text, $re, { param($m) $m.Groups[1].Value + '"' + $val + '"' }) }
    else { $script:text = ([regex]'\{').Replace($script:text, "{`r`n    `"$key`": `"$val`",", 1) }
  }

  # ---- 4. configure ---------------------------------------------------------------
  Info "Configuring $conf"
  $ports = @()
  switch ($Component) {
    "webserver" {
      Copy-Item $License "$target\license_MNS.dat"
      if ($ApiPort) { SetKey "PortAPI" $ApiPort }
      if ($WebPort) { SetKey "PortWEB" $WebPort }
    }
    "webserver-front" { Copy-Item -Recurse -Force "$FrontPki\*" $target; $script:text = [IO.File]::ReadAllText("$target\$conf") }
    default {
      SetKey "_sharedInternal" $SharedInternal
      SetKey "webserver" $Webserver
      SetKey "name" $Name
      SetKey "description" "Mugnsoft $Component on $env:COMPUTERNAME"
      if ($Port) { SetKey "port" $Port }
      if ($Component -ne "integrator") { SetKey "location" $Location }
      if ($Component -eq "monitor" -and $Advertise) { SetKey "ip" $Advertise }
      if ($Component -eq "integrator") {
        Copy-Item $License "$target\license_MNS.dat"
        SetKey "os" "windows"
        if (-not $WebserverUrl) { $WebserverUrl = "https://" + $Webserver.Split(":")[0] + ":9090" }
        SetKey "webserverUrl" $WebserverUrl
      }
    }
  }
  [IO.File]::WriteAllText("$target\$conf", $script:text, (New-Object Text.UTF8Encoding $false))
  $cfg = $script:text | ConvertFrom-Json
  if ($Component -in @("webserver", "webserver-front")) { $ports = @($cfg.PortAPI, $cfg.PortWEB) } else { $ports = @($cfg.port) }

  # ---- 5. open the port(s) in Windows Firewall --------------------------------------
  if (-not $NoFirewall) {
    $rule = "Mugnsoft $Component"
    if (-not (Get-NetFirewallRule -DisplayName $rule -ErrorAction SilentlyContinue)) {
      New-NetFirewallRule -DisplayName $rule -Direction Inbound -Protocol TCP -LocalPort $ports -Action Allow | Out-Null
      Info "Firewall: inbound TCP $($ports -join ', ') allowed (rule '$rule')"
    }
  }

  # ---- 6. install the service (components register with the Webserver here) ------
  Info "Installing the service"
  $out = (Native "$target\$bin" @("install")).Out
  $out -split "`r?`n" | Where-Object { $_ -and $_ -notmatch '^time=' } | ForEach-Object { Write-Host "   $_" }
  # "Service '<name>' installed." - not "Service '<name>' not installed."
  if ($out -notmatch "Service '[^']+' installed\.") { Fail "the service was not installed - read the messages above, fix, then run: cd $target; .\$bin install" }

  # ---- 7. start it ----------------------------------------------------------------
  Info "Starting the service"
  (Native "$target\$bin" @("start")).Out -split "`r?`n" | Where-Object { $_ -and $_ -notmatch '^time=' } | ForEach-Object { Write-Host "   $_" }

  # install generates the webserver's _sharedInternal: read the config again
  $cfg = [IO.File]::ReadAllText("$target\$conf") | ConvertFrom-Json
  Write-Host ""
  switch ($Component) {
    "webserver" {
      Write-Host "Webserver installed in $target"
      Write-Host "  Web UI:   https://<this host>:$($cfg.PortWEB)/   (admin / admin, change it at first login)"
      Write-Host "  API:      <this host>:$($cfg.PortAPI)   -> the -Webserver value for the components"
      Write-Host "  _sharedInternal (pass it to every component as -SharedInternal):"
      Write-Host "    $($cfg._sharedInternal)"
    }
    "webserver-front" { Write-Host "Webserver-Front installed in $target - now configure ADMIN (see the Webserver-Front install page)." }
    default {
      Write-Host "$Component '$Name' installed in $target and registered with $Webserver."
      Write-Host "Last step: on the Webserver, open Settings (gear) > Components, right-click '$Name' and choose enable server."
    }
  }
} finally {
  Set-Location $env:TEMP
  Remove-Item -Recurse -Force $work -ErrorAction SilentlyContinue
}

Option B — Step by step

The same steps by hand, in an elevated PowerShell.

1. Download and verify (on every host; $c is webserver, monitor, integrator or discovery_agent):


$v = "4.2.0"; $c = "monitor"              # <- change $c for each host
$f = "mugnsoft-$c-$v.windows-amd64.zip"
Invoke-WebRequest https://mugnsoft.com/bin/$v/$f -OutFile $f -UseBasicParsing
Invoke-WebRequest https://mugnsoft.com/bin/$v/$f.sig -OutFile "$f.sig" -UseBasicParsing
Invoke-WebRequest https://mugnsoft.com/bin/Mugnsoft_public.key -OutFile Mugnsoft_public.key -UseBasicParsing

Verify in Git Bash (or a Gpg4win prompt) from the same folder. It must print Good signature from "Mugnsoft ..."; the This key is not certified warning is expected. A BAD signature means the file is corrupt or altered: delete it.


gpg --import Mugnsoft_public.key
gpg --verify mugnsoft-monitor-4.2.0.windows-amd64.zip.sig mugnsoft-monitor-4.2.0.windows-amd64.zip

Then extract (back in PowerShell):


Expand-Archive $f -DestinationPath C:\Mugnsoft
cd C:\Mugnsoft\$c

2. Webserver host: copy the license, install and start, then read _sharedInternal (the Webserver writes a random one into webserver.json at install):


Copy-Item C:\path\to\license_MNS.dat C:\Mugnsoft\webserver\
cd C:\Mugnsoft\webserver
.\webserver.exe install; .\webserver.exe start
Select-String _sharedInternal webserver.json
New-NetFirewallRule -DisplayName "Mugnsoft webserver" -Direction Inbound -Protocol TCP -LocalPort 8050,9090 -Action Allow

3. Monitor / Integrator / Sentinel Agent host: edit the .json file of the component (monitor.json, integrator.json or discovery_agent.json) with Notepad and set:

Key Set it to Note
_sharedInternal the Webserver’s value Must be identical to the Webserver’s
webserver 10.0.0.5:8050 Webserver address and API port
name a unique name, e.g. monitor-paris-1 Letters, digits, hyphens. The packaged value is an example
location, description your text The packaged values are examples
port keep, or another free port The Webserver must reach it
ip monitor only, optional The IP the Webserver must dial, when the host has several
webserverUrl https://10.0.0.5:9090 Integrator only

For the Integrator, also copy its license_MNS.dat into C:\Mugnsoft\integrator\. Then open the port, install (this registers the component) and start, replacing monitor and 8072 with your component and its port:


New-NetFirewallRule -DisplayName "Mugnsoft monitor" -Direction Inbound -Protocol TCP -LocalPort 8072 -Action Allow
.\monitor.exe install; .\monitor.exe start

install must print status: Success twice (registration, then certificate) and Service '...' installed.

Enable the components

A registered component is pending until you enable it:

  1. Sign in to https://10.0.0.5:9090/ (admin / admin; you must choose a new password at first sign-in).
  2. Open the gear menu → components, right-click the new component → enable server. A success message confirms that the Webserver reached it.

Check the address. The Webserver connects to the IP address the component registered. A host with several network interfaces can register the wrong one: then enable server fails with getting access token: Failed. Make sure the component is running. Right-click the component → edit server, set the IP the Webserver can reach, save, then enable it again. For a monitor you can also pass -Advertise <ip> (or set ip in monitor.json) before installing.

Manage the services

Task Command (from the component folder) Windows equivalent
Status — Get-Service MugnsoftMonitor
Stop / start / restart .\monitor.exe stop, .\monitor.exe start, .\monitor.exe restart Restart-Service MugnsoftMonitor
Run in the foreground (debugging) .\monitor.exe stop; .\monitor.exe run —
Register again with the Webserver .\monitor.exe register —
Remove the service .\monitor.exe uninstall (then delete the folder) —
Logs log\monitor.log in the component folder —

Replace monitor / MugnsoftMonitor with webserver / MugnsoftWebserver, integrator / MugnsoftIntegrator, discovery_agent / MugnsoftDiscoveryAgent. Removing a component from the Webserver is done on its Components page (right-click → delete server).

To upgrade, follow the order and the checks in the release notes of the target version; this page covers new installations.

Monitor probes: browsers for EUM journeys

URL, API, TCP, ping and the other monitor types need nothing more. EUM (Web UI) journeys need a browser on the probe host: Chrome, Edge or Firefox. At start, the monitor downloads the matching webdriver if it can reach the Internet. Otherwise, download the driver that matches the browser version yourself and put it in C:\Mugnsoft\monitor\drivers\:

Browser Driver Download
Chrome chromedriver.exe Chrome for Testing
Firefox geckodriver.exe geckodriver releases
Edge msedgedriver.exe Edge WebDriver

To record journeys, use Mugnsoft Pulse or the Mugnsoft IDE.

Troubleshooting

Message Cause and fix
self pre-registering ... status: Failed / Make sure that component can reach the Webserver API endpoint. The host cannot reach webserver on the API port: check the value, the Webserver service, the firewalls. Test with Test-NetConnection 10.0.0.5 -Port 8050
a server is already defined with this name A component with this name exists on the Webserver (an earlier attempt). Delete it on the Components page, or choose another -Name, then run install again
a server is already defined with this IP and port A component already registered this IP address and port (a previous installation of this host). Delete it on the Components page, or use another -Port, then run install again
Failed to install service '...': service ... already exists That component kind is already installed on this host: one per host. Use it, or uninstall it first
No license ...\license_MNS.dat file found Integrator: copy its license file into its folder (-License with the script)
license not valid for this machine The license file belongs to another host: licenses are bound to the host
enable server: getting access token: Failed The Webserver cannot reach the component: wrong registered IP (see Check the address), or the component’s port is blocked
enable server / Push Settings: rejected the internal login (HTTP 401) _sharedInternal differs from the Webserver’s: fix it in the component’s .json and restart the component
running scripts is disabled on this system Start the script with powershell -ExecutionPolicy Bypass -File ... as shown above
<folder> already exists (script) The script never overwrites an installation: choose another -Dir, or remove the old one first (uninstall)
SIGNATURE CHECK FAILED (script) / BAD signature The package is corrupt or altered: download it again; never install it

See also

Translations