Skip to content

v0.1.1: GUI auto-elevates, installer handles upgrades cleanly#2

Merged
recklessop merged 3 commits into
mainfrom
claude/pensive-easley-4abcbe
May 8, 2026
Merged

v0.1.1: GUI auto-elevates, installer handles upgrades cleanly#2
recklessop merged 3 commits into
mainfrom
claude/pensive-easley-4abcbe

Conversation

@recklessop
Copy link
Copy Markdown
Owner

Changes

  • GUI auto-elevates via embedded manifest (requestedExecutionLevel=requireAdministrator). The Start Menu shortcut now shows the UAC shield icon and double-click works without right-click then "Run as administrator". Fixes the "Disconnected: access to the path is denied" symptom seen on v0.1.0 caused by UAC token splitting denying the Administrators group on the standard token.
  • Installer cleanly handles upgrades: net stop WebhookServer (synchronous, blocks until actually stopped) plus taskkill /f for any running GUI or orphan Service process before file copy. No more manual Stop-Service step.
  • "Backups" menu renamed to "Config Checkpoints" to better describe the auto-snapshot model. Internal API names unchanged.

Test plan

  • dotnet test passes (25/25)
  • dotnet build -c Release clean
  • Tag triggers release workflow, installer published to GitHub Releases
  • Upgrade install on a v0.1.0 machine without manually stopping the service first

Generated with Claude Code

recklessop and others added 3 commits May 8, 2026 10:22
Two fixes for the v0.1.0 install experience:

1. Embed app.manifest with requestedExecutionLevel=requireAdministrator
   so the GUI always elevates. The named pipe is ACL'd to SYSTEM and
   the Administrators group, but UAC token splitting puts Admins in
   deny-only on the standard token, so launching the GUI from the
   Start Menu fails to connect with "Access is denied". The manifest
   forces UAC to elevate, surfaces the shield icon on the shortcut,
   and matches the reality that the GUI cannot function without
   admin rights.

2. Add a [Code] PrepareToInstall hook to webhook-server.iss that runs
   `sc stop WebhookServer` before file copy. Upgrade installs were
   failing on locked binaries because the running service held the
   exes open. sc returns non-zero on fresh installs (no service yet)
   which we ignore.

Bumps Version to 0.1.1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
User-facing copy only; internal API names (Backups collection,
BackupEntry, list-backups op, etc.) stay the same to avoid churn
through the wire protocol and existing on-disk files. The new
phrasing makes the auto-snapshot-before-save model more discoverable.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The previous sc.exe stop is fire-and-forget; on slower machines the
file-copy step started before the service had actually released its
binaries, leaving the upgrade in a broken state. Switch to net.exe
stop which blocks until the service reports STOPPED.

Also taskkill any running WebhookServer.Gui.exe (the user might have
left the tray running) and any orphan WebhookServer.Service.exe (from
deploy.ps1 dev runs) so all copies of the binaries are unlocked
before [Files] runs.

Pre-flight ServiceExists() check via sc query so the installer only
calls "net stop" when there is actually a service to stop, rather
than relying on net's error code.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@recklessop recklessop force-pushed the claude/pensive-easley-4abcbe branch from 16ce906 to 0217d9f Compare May 8, 2026 14:22
@recklessop recklessop merged commit 7d94535 into main May 8, 2026
1 check passed
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.

1 participant