HealthChecker is a desktop app for Windows 10/11 built on .NET 10 + WPF.
It monitors domains and IP addresses every second, keeps short-term availability/ping charts,
stores state/history in %AppData%, supports tray mode/autostart, and includes an integrated
WinMTR-style traceroute view.
- Add monitoring targets as:
- domain (
example.com) - URL host (
https://example.com/path) - IPv4/IPv6 address
- domain (
- 1-second background probing for each target.
- Automatic domain-to-IP resolution.
- Per-target status in compact/expanded card format.
- Last-60-probes infographics:
- availability bars
- ping trend bars
- value tooltips on hover
- WinMTR-inspired traceroute screen with per-hop metrics:
Hostname,Nr,Loss %,Sent,Recv,Best,Avg,Worst,Last
- System tray integration:
- minimize to tray
- tray context menu (
Open,Pause/Resume,Probe Now,Exit)
- Autostart support (
--tray) via Windows Run registry key. - Persisted app state at
%AppData%\\HealthChecker\\state.json.
- .NET SDK:
10.0.x - UI: WPF
- Pattern: MVVM (lightweight, no external MVVM framework)
- Networking:
System.Net.NetworkInformation.Ping- DNS resolution via
System.Net.Dns
- Persistence: JSON (
System.Text.Json) - Windows integration:
NotifyIcon(Windows Forms interop)Microsoft.Win32.Registryfor startup registration
.
+- HealthChecker.sln
+- README.md
+- LICENSE
+- THIRD_PARTY_NOTICES.md
+- .gitignore
L- HealthChecker/
+- HealthChecker.csproj
+- MainWindow.xaml
+- MainWindow.xaml.cs
+- App.xaml
+- App.xaml.cs
+- Models/
+- ViewModels/
+- Services/
L- Converters/
- Windows 10 or Windows 11
- .NET 10 SDK installed
- ICMP permissions available in local environment/network policy (required for ping/traceroute)
git clone <your-repo-url>
cd HealthCheckerdotnet build .\HealthChecker.slndotnet run --project .\HealthChecker\HealthChecker.csprojdotnet run --project .\HealthChecker\HealthChecker.csproj -- --trayUse the repository script to generate runnable standalone .exe files:
powershell -ExecutionPolicy Bypass -File .\scripts\build-release-assets.ps1 -Version v1.0.0Output:
artifacts\v1.0.0\
HealthChecker-v1.0.0-debug.exe
HealthChecker-v1.0.0-release.exe
HealthChecker-v1.0.0-sources.zip
This avoids the common issue where only HealthChecker.exe is uploaded without its runtime dependencies.
Build a signed MSIX installer package for WinUI:
powershell -ExecutionPolicy Bypass -File .\scripts\build-winui-installer.ps1 -Version 1.1.0 -Configuration ReleaseOutput:
artifacts\v1.1.0\installer\
HealthChecker-v1.1.0-msix-installer.zip
package\
HealthChecker-v1.1.0-x64.msix
HealthChecker-v1.1.0-x64.cer
Install-HealthChecker-v1.1.0.ps1
Install flow:
- Unzip
HealthChecker-v1.1.0-msix-installer.zip. - Run
Install-HealthChecker-v1.1.0.ps1as Administrator. - The script imports the signing certificate and installs the MSIX package.
dotnet publish .\HealthChecker\HealthChecker.csproj -c Release -r win-x64 --self-contained falseArtifacts are generated under:
HealthChecker\bin\Release\net10.0-windows\win-x64\publish\
dotnet publish .\HealthChecker\HealthChecker.csproj -c Release -r win-x64 --self-contained true- A 1-second dispatcher timer triggers a monitoring cycle.
- Each cycle probes all targets asynchronously.
- Every target stores rolling samples (used for uptime and charts).
- State is saved periodically and on shutdown to
%AppData%\\HealthChecker\\state.json.
- In an expanded target card click
Tracert. - App switches to internal traceroute view (with
BackandStop). - A probe loop is run per TTL (up to 30 by default) with 1-second interval.
- Per-hop stats are aggregated continuously in table rows.
- When destination is reached, max active hop range is reduced dynamically.
Start with Windows (launch in tray)toggles registry value:HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
- App registers executable path with
--trayargument. - Closing the main window sends app to tray; use tray menu
Exitfor full shutdown.
- HealthChecker does not send telemetry to external servers.
- Stored local data includes target list and probe history required for UI stats.
- Storage location:
%AppData%\\HealthChecker\\state.json.
- Current traceroute table is optimized for live stats, not for long-session export yet.
- No built-in CSV/HTML export at this stage.
- Geographic mapping/ASN enrichment is not included yet.
Stop the running process and build again:
Get-Process HealthChecker -ErrorAction SilentlyContinue | Stop-Process -Force
dotnet build .\HealthChecker.sln- Verify firewall policy and ICMP allowance.
- Check local network restrictions (corporate VPN/policies can block ICMP).
- Keep UI changes in
MainWindow.xamland interaction logic inMainViewModel. - Network logic belongs in
Services/. - Avoid committing
bin/andobj/artifacts (already covered by.gitignore).
Before your first push, update placeholders:
- Replace
<your-repo-url>in this README. - Update license copyright owner if needed.
- Add screenshots under
docs/screenshotsand link them here. - Optionally configure GitHub Actions for CI (
dotnet buildon PR).
Traceroute UX and metric model were inspired by WinMTR behavior. See THIRD_PARTY_NOTICES.md for details.
This project is licensed under the MIT License. See LICENSE.