Skip to content

Add Windows installer and Manager GUI (dashboard, settings, logs, advanced, updates)#4350

Open
exzile wants to merge 9 commits into
openvinotoolkit:mainfrom
exzile:feature/windows-manager-gui
Open

Add Windows installer and Manager GUI (dashboard, settings, logs, advanced, updates)#4350
exzile wants to merge 9 commits into
openvinotoolkit:mainfrom
exzile:feature/windows-manager-gui

Conversation

@exzile

@exzile exzile commented Jul 1, 2026

Copy link
Copy Markdown

Closes #4351 · relates to #4347

Summary

Adds a standalone Windows installer/uninstaller/repairer and a tray-based OVMS Manager GUI under packaging/windows/, giving Windows users a guided way to install, run, monitor, configure, repair, and update OpenVINO Model Server without manual steps. It complements the portable ovms.zip (does not replace it).

Installer (packaging/windows/installer, Inno Setup)

  • Per-user, no elevation: installs to %LOCALAPPDATA%\Programs\OVMS, data under %LOCALAPPDATA%\OVMS, HKCU.
  • Bundles the python_on package as one version-matched payload (OVMS + OpenVINO runtime + GenAI + tokenizers + Python) — no install-time downloads.
  • Modern wizard UI with OpenVINO branding; existing-install detection with a Repair/upgrade vs. Uninstall choice page; Apps & Features uninstaller with a 3-way data choice (keep all / keep models / remove all).
  • Caches the pristine payload to %LOCALAPPDATA%\OVMS\packages\source for offline repair (repair-package.ps1: verify → restore missing files → ovms.exe --version).

Manager GUI (packaging/windows/manager, .NET WinForms, tray app)

An app-shell with a left nav rail (Fluent icons, accent selection, Running/Stopped status pill) and five pages, all responsive and off-UI-thread for process/HTTP work:

  • Dashboard — status cards (status/pid, REST endpoint, gRPC, models served, health via GET /v3/models, package variant, runtime mode); Start / Stop / Restart / Open Logs / Open Model Folder; 5s auto-refresh.
  • Settings — responsive form (fields stretch with the window): REST/gRPC ports, bind address, log level/path, model repository (with Browse), startup mode, show-tray, start-at-login (HKCU Run); atomic save with .bak, restart prompt for command-line-affecting changes, and a non-local bind-address warning.
  • Logs — dark console tailing the server log (500 lines) with Refresh / Open folder / Clear, auto-scroll toggle, log path, and line count / last-refreshed.
  • Advanced — Environment card (install/data dirs, Manager version, config path, effective command line + Copy) and Maintenance card (Repair Package / Validate Environment / Export Diagnostics as described action rows).
  • Updates (Windows Manager: Updates page and staged package upgrade workflow #4351) — compares installed vs. latest for Base package / Model Server / GenAI, one-click check, release-note links, install actions shown only when a newer version exists, backed by a validated staged upgrade (upgrade-package.ps1: download → verify → back up → replace → validate → reconfigure).

Supporting scripts (packaging/windows/scripts)

configure-ovms, start-ovms/stop-ovms (process or service), set-path, ovms-env, install-service/uninstall-service, validate-install, repair-package, upgrade-package, uninstall-ovms. Atomic JSON writes, runtime ownership via runtime.json, port preflight.

Design

packaging/windows/OVMS_WINDOWS_INSTALLER_MANAGER_PLAN.md documents the architecture and phased plan.

Validation

  • dotnet build packaging/windows/manager/src/OVMS.Manager/OVMS.Manager.csproj -c Release — clean (0 warnings).
  • Installer builds with Inno Setup 6.7.3 via build_installer.ps1.
  • Install / repair / uninstall (incl. 3-way data prompt), existing-install choice page, and all five Manager tabs exercised manually on Windows 11.
  • The package install/upgrade action was not executed end-to-end here because it downloads and replaces the local OVMS runtime.

Notes

🤖 Generated with Claude Code

How to build

# 1. Produce the OVMS Windows package (python_on) first
.\windows_build.bat --with_python
.\windows_create_package.bat opt --with_python   # -> dist\windows\ovms\ovms.exe

# 2. Build the Manager (self-contained single-file)
.\packaging\windows\manager\build_manager.ps1

# 3. Build the installer (needs Inno Setup 6)
.\packaging\windows\installer\build_installer.ps1   # -> dist\windows\OVMS-Setup.exe

How to test

  • Run OVMS-Setup.exe (per-user, no admin). Confirm Start Menu shortcuts (Open / Start / Stop / Repair / Uninstall) and that ovms.exe --version works.
  • Launch OVMS Manager; verify each tab: Dashboard status/health, Settings save + restart prompt, Logs tail, Advanced repair/validate/export, Updates check.
  • Repair: delete a file under the install dir, run Repair, confirm it is restored.
  • Uninstall via Apps & Features; verify the 3-way data choice and cleanup of PATH/startup/shortcuts.

Screenshots

Dashboard � live status, health, and server controls
Dashboard

Settings � responsive server & startup configuration
Settings

Logs � live server log tail
Logs

Advanced � environment info and maintenance actions
Advanced

Updates � installed vs. latest with staged upgrade (#4351)
Updates

Related

@exzile exzile changed the title [codex] Add Windows manager update workflow Add Windows manager update workflow Jul 1, 2026
@exzile exzile changed the title Add Windows manager update workflow Add Windows installer and Manager GUI (dashboard, settings, logs, advanced, updates) Jul 1, 2026
@exzile exzile marked this pull request as ready for review July 1, 2026 12:37
exzile and others added 9 commits July 1, 2026 08:55
Introduce packaging/windows: a per-user Inno Setup installer plus
PowerShell control scripts and a tray Manager that make OpenVINO Model
Server installable, repairable, and removable on Windows without admin
rights.

- Installer (OVMSInstaller.iss): per-user install to %LOCALAPPDATA%,
  modern wizard UI with OpenVINO branding, existing-install detection
  with a repair/upgrade-vs-uninstall choice page, and caches the
  pristine package under %LOCALAPPDATA%\OVMS\packages\source for
  offline repair.
- Scripts: configure-ovms, start/stop (process or service), set-path,
  service install/uninstall, validate-install, repair-package (verify +
  restore + ovms --version), and uninstall with a 3-way data choice
  (preserve all / keep models / remove all).
- Manager: WinForms tray app (start/stop/status) as an MVP; full GUI
  to follow.
- Bundles the python_on OVMS package (OpenVINO runtime, GenAI,
  tokenizers, Python) as a single version-matched payload.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: exzile <joeypongallo@gmail.com>
Replace the tray-only stub with a real WinForms Manager window while
keeping the tray. Split into Program / TrayApplicationContext /
MainForm / OvmsController / OvmsSettings.

- Dashboard: live status (pid), runtime mode, REST/gRPC, bind, variant,
  health check (GET /v3/models) and served-model count; Start/Stop/
  Restart/Refresh/Open-logs/Open-models.
- Settings: edit ports, bind, log level/path, model repo, startup mode,
  show-tray, start-at-login (HKCU Run with --tray); atomic save with
  .bak and restart prompt for command-line-affecting changes.
- Logs: tail last 500 lines of the server log.
- Advanced: effective command line, repair package, validate env,
  export diagnostics bundle (zip).
- All process/HTTP work runs off the UI thread; single-instance mutex;
  close-to-tray; GrpcPort default fixed to 0 to match the template.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: exzile <joeypongallo@gmail.com>
Replace the TabControl layout with an app-shell: a left nav rail
(Dashboard/Settings/Logs/Advanced) with Fluent icons, selected accent
bar, and a Running/Stopped status pill, plus a content header with a
refresh icon-button.

- Theme.cs: color/font tokens + Fluent-icon glyph constants (Segoe
  Fluent Icons, falling back to Segoe MDL2 Assets).
- CardPanel.cs: anti-aliased rounded-rectangle panel.
- Dashboard: status cards (status/REST/gRPC/models/health/variant/mode)
  with colored dots and a 5s auto-refresh timer.
- Logs: dark console (Consolas). Settings: aligned TableLayoutPanel.
  Advanced: command line + Repair/Validate/Export with inline status.
- Logic layer (OvmsController/Program/Tray/Settings) unchanged; tray
  Open continues to open this window.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: exzile <joeypongallo@gmail.com>
Layout fixes:
- Nav rail buttons now render (NavButton no longer docks inside the
  FlowLayoutPanel; rail uses a Fill nav list between header and pill).
- Action buttons show glyphs (Start/Stop/Restart) and no longer clip.
- Wider status cards so values aren't truncated; larger default window.

Page build-out:
- Settings: Server + Startup/tray cards, Browse buttons for paths,
  Save/Reset with inline status and a non-local bind-address warning.
- Logs: toolbar (refresh/open/clear), log path, auto-scroll toggle,
  line count + last-refreshed, "(log file not found)" handling.
- Advanced: Environment card (dirs, version, command line + Copy) and
  Maintenance card (Repair / Validate / Export Diagnostics).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: exzile <joeypongallo@gmail.com>
NavButton subscribed its own Click event to a handler that called
OnClick(), which re-raises Click, recursing until the stack overflowed
(0xc00000fd) on the first nav click. Only forward the child labels'
clicks to OnClick now; the panel's own Click is raised by the framework.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: exzile <joeypongallo@gmail.com>
Fields now stretch with the window (180px label column + percent-width
field column; text inputs anchored, path textboxes fill with Browse
pinned right). Added card subtitles, consistent row rhythm, muted
helper text for bind address and gRPC port, and a footer divider.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: exzile <joeypongallo@gmail.com>
Environment card now uses aligned label/value rows (install dir, data
dir, version, config path) that stretch and ellipsize, plus a dedicated
monospace command-line box with Copy. Maintenance card presents Repair /
Validate / Export Diagnostics as titled+described action rows with
right-aligned buttons. Responsive layout matching the Settings page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: exzile <joeypongallo@gmail.com>
Signed-off-by: exzile <joeypongallo@gmail.com>
…ed, updates)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: exzile <joeypongallo@gmail.com>
@exzile exzile force-pushed the feature/windows-manager-gui branch from 504abdb to 23752ee Compare July 1, 2026 12:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Windows Manager: Updates page and staged package upgrade workflow

1 participant