The Windows ZVM is largely deprecated in favor of the ZVMA on Kubernetes, so the older recipe and its companion sender script are gone. The ZVMA recipe is promoted to canonical and its header no longer references the deleted recipe. - delete docs/recipes/zerto-pre-post-scripts.md (Windows-ZVM-only) - delete scripts/examples/zerto-post-failover.ps1 (curl.exe sender) - promote ZVMA recipe in README, docs/README, installation, sync-wiki If anyone still needs the DNS-update / service-check handler from the deleted recipe it's available in git history (commit before this one). Happy to re-resurrect into a generic post-failover recipe if folks ask.
5.9 KiB
Installation
This page covers a fresh install. If you already have Webhook Server installed, see Upgrading. To remove it, see Uninstalling.
Requirements
- Windows 10, Windows 11, or Windows Server 2019 / 2022 / 2025
- Administrator rights to install the service and to run the GUI
- .NET 8 runtimes (the installer downloads + installs them automatically if missing — see below)
- (Optional, only if you publish from source) .NET 8 SDK
The installer is x64 only. There is no x86 build.
.NET 8 runtimes
Webhook Server is published as framework-dependent (so the installer stays small) and needs two .NET 8 runtimes on the target machine:
| Runtime | Used by | Auto-installed by setup |
|---|---|---|
ASP.NET Core 8 Runtime (Microsoft.AspNetCore.App 8.x) |
the Service / Kestrel | Yes |
.NET Desktop Runtime 8 (Microsoft.WindowsDesktop.App 8.x) |
the WPF GUI | Yes |
A clean Windows Server install has neither. The installer detects what's missing and downloads + installs each one silently before copying our files. If the machine has no internet access, install them manually first:
- ASP.NET Core 8 Runtime — https://aka.ms/dotnet/8.0/aspnetcore-runtime-win-x64.exe
- .NET Desktop Runtime 8 — https://aka.ms/dotnet/8.0/windowsdesktop-runtime-win-x64.exe
Run each with /install /quiet /norestart for unattended installs, or just double-click. A reboot is rarely required.
To check what's already installed:
dotnet --list-runtimes
# expect to see Microsoft.AspNetCore.App 8.x.y and Microsoft.WindowsDesktop.App 8.x.y
1. Download
Grab the latest installer from the GitHub Releases page:
https://github.com/recklessop/webhook-server/releases/latest
Look for the asset named WebhookServer-Setup-X.Y.Z.exe.
2. Run the installer
Double-click the .exe. UAC will prompt — accept. The wizard:
- Copies the binaries to
C:\Program Files\WebhookServer\ - Creates a Start Menu folder named Webhook Server with a GUI shortcut + Uninstall shortcut
- Optionally creates a desktop shortcut (checkbox; off by default)
- Registers the Windows Service named
WebhookServer, runs it asLocalSystem, sets it to start automatically at boot, and configures it to restart on failure - Starts the service
- Offers to launch the GUI when finished — leave the checkbox ticked
The first time the GUI opens, you'll see UAC prompt again because the GUI requires elevation (it talks to the service over a named pipe restricted to SYSTEM and the Administrators group). Accept it.
If the GUI's status bar shows a green dot and Connected — HTTP 8080, you're done.
Default ports: HTTP on
8080, HTTPS off. Both can be changed under Server → Settings. Port8080is rarely in use on a fresh server but conflicts with some other tools — if you seeConnection refusedlater, this is the first thing to check.
3. Add your first endpoint
In the GUI:
- File → New endpoint
- Slug:
ping - Auth → Mode: None
- Executor → Type: Windows PowerShell
- Executor → Inline command:
Write-Output 'pong' - Click Save
The endpoint appears in the grid. Right-click it → Copy URL, paste into a browser. You should get back something like:
{ "runId": "...", "exitCode": 0, "durationMs": 134, "stdout": "pong\r\n", ... }
That's it. Real-world recipes start with Zerto ZVMA pre/post → notify + VM health check.
Silent / unattended install
For deploying to many machines via Group Policy, SCCM, Intune, Ansible, etc. — the installer is built with Inno Setup and supports its standard silent-mode flags:
WebhookServer-Setup-0.1.1.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
Useful flags:
| Flag | What it does |
|---|---|
/SILENT |
Show progress, no questions |
/VERYSILENT |
No UI at all |
/SUPPRESSMSGBOXES |
Suppress info / error popups (use with /SILENT or /VERYSILENT) |
/NORESTART |
Don't restart automatically — there's nothing here that needs it, but pair with /SUPPRESSMSGBOXES for total quiet |
/DIR="C:\Tools\WebhookServer" |
Override the install location |
/LOG="C:\Temp\install.log" |
Write a verbose installer log |
/TASKS="desktopicon" |
Pre-tick the optional desktop-icon task |
The post-install service install runs the same install-service.ps1 script regardless of silent flags.
Manual install from source (if you don't want to trust the prebuilt installer)
# clone (or your fork)
git clone https://github.com/recklessop/webhook-server.git
cd webhook-server
# from an elevated PowerShell:
powershell -ExecutionPolicy Bypass -File scripts\deploy.ps1
deploy.ps1 publishes both projects, copies the binaries to C:\Program Files\WebhookServer\, registers the service, and starts it. Re-run after a git pull to upgrade.
To run the service under a non-default account (e.g. a gMSA for AD operations), pass -ServiceAccount:
.\scripts\deploy.ps1 -ServiceAccount 'CONTOSO\svc-webhookserver$'
See Service account & Active Directory for the full picture.
Where things live after install
| Path | What |
|---|---|
C:\Program Files\WebhookServer\ |
Binaries (WebhookServer.Service.exe, WebhookServer.Gui.exe, the icon, install/uninstall scripts) |
C:\ProgramData\WebhookServer\config.json |
The configuration. Backups in backups\, daily-rolling logs in logs\. Don't edit by hand — secrets are DPAPI-encrypted and the service won't pick up your changes without a reload. Use the GUI. |
\\.\pipe\WebhookServerAdmin |
The named pipe the GUI uses to talk to the service. ACL'd to SYSTEM + Administrators only. |
The installer never touches C:\ProgramData\WebhookServer\. Uninstalling preserves your config and logs by default; see Uninstalling for how to wipe them too.