Skip to content

feat: About updater, Start with Windows, AppData install - #1

Merged
piranout merged 3 commits into
mainfrom
feat/about-updater-start-with-windows
Aug 21, 2026
Merged

feat: About updater, Start with Windows, AppData install#1
piranout merged 3 commits into
mainfrom
feat/about-updater-start-with-windows

Conversation

@piranout

@piranout piranout commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

What

About + in-app updater, Start with Windows, and Midget's AppData installer/update stack on Aperture's existing hamburger Settings popup (hamburger SettingsToggle). Not a separate About window.

  • Version header shows installed/portable, newest GitHub release, Update / Update (prerelease), progress, and errors.
  • Start with Windows sits with the other SETTINGS checkboxes (Include videos, Group into date sections). Source of truth is HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Aperture (quoted exe path).
  • Install Aperture on this PC / Uninstall copy to %LocalAppData%\Programs\Aperture\Aperture.exe, Start menu + optional Desktop .lnk, no .md file association. After install/update the Run key is rewritten to the installed exe so logon does not keep a Downloads path.
  • Updater is Midget's GitHub-releases + Authenticode + installed rename-dance vs portable apply. Aperture already signs release exes; this is the in-app half of that stack.

Commits: c8200de then ed7877e on feat/about-updater-start-with-windows.

How to test

  1. Build/run from C:\code\wt-aperture-about-startup (dotnet run --project src\Aperture.App).
  2. Open the hamburger. Confirm version + newest-release line, Start with Windows under SETTINGS, and Install/Uninstall buttons.
  3. Toggle Start with Windows. Check HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Aperture is created (quoted exe path) or deleted.
  4. Install Aperture on this PC — copy lands in %LocalAppData%\Programs\Aperture, Start menu .lnk appears, hamburger shows (installed). If Start with Windows was on, Run key now points at that installed exe.
  5. With network: opening the hamburger checks https://api.github.com/repos/FuncularLabs/Aperture/releases. On current betas, newest line should show the latest prerelease tag.
  6. Update button: optional live apply — UNVERIFIED in this PR (Authenticode on a real asset + restart). Prefer a spare copy.
  7. dotnet test tests\Aperture.Core.Tests\Aperture.Core.Tests.csproj — 231 passed.

Copied vs adapted

About — Midget's About idea (version, installed/portable, newest stable/prerelease, Update buttons, status/progress), wired into the existing hamburger Popup. Not a copy of AboutDialog Window chrome.

Start with Windows — New (Midget has no autostart checkbox; its Settings Startup is blank-document vs no-document). SETTINGS checkbox. Run key retargeted after install/update. An installed launch also repairs a stale Run value.

Installer / updater — Copied Midget's stack, not WiX/MSIX/Squirrel/Velopack/Inno:

  • src/Aperture.App/Updates/* (namespaces Aperture.App.Updates): GitHub feed, UpdateOffer, Authenticode (O="Funcular Labs, Inc." + MS Identity Verification root), installed vs portable apply, .old/staged cleanup.
  • RegistrationService: AppData copy, Start menu + Desktop .lnk, uninstall, --finish-move. No ProgID / .md Open-with.
  • Hamburger Install/Uninstall (same transparent full-width buttons as Manage tags). MessageBox prompts stand in for Midget's RegisterDialog Window.

Adapted only: repo FuncularLabs/Aperture, User-Agent Aperture-Updater, asset suffix -win-x64.exe (not -win-x64-net10.exe), install dir Programs\Aperture\Aperture.exe, staged prefix .aperture-update-staged.

Do not merge from this agent.

About and a GitHub-releases updater live on the existing hamburger settings
popup (the version header), not a separate Window. The updater idea is
adapted from Markdown Midget (version parse/compare, UpdateOffer, win-x64
asset feed, Authenticode, portable apply) rather than a chrome copy.
Aperture assets are Aperture-v{tag}-win-x64.exe; prereleases stay in the
feed so current beta users can update. Apply is portable — there is no
installer yet — and a Start-with-Windows Run-key is retargeted at the new
exe when that checkbox was on.

Start with Windows is a Settings checkbox next to Include videos / Group by
date. Source of truth is HKCU\...\Run\Aperture (quoted ProcessPath); registry
failures never throw. Off by default.

Product choice: with no stable GitHub release yet, the newest-release line
shows the newest prerelease tag rather than "none published".

UNVERIFIED: live Authenticode on a downloaded GitHub asset; end-to-end
apply/restart; hamburger layout on a short display (WPF, not exercised in UI).
Copy Markdown Midget's installer/update stack onto the hamburger (not a
separate Window / WiX / Squirrel):

- Updates/* moved to Aperture.App/Updates (internal + InternalsVisibleTo).
  Installed apply uses the in-place rename dance; portable apply still
  drops the versioned exe next to the running one. Authenticode requires
  O="Funcular Labs, Inc." and the MS Identity Verification root.
- RegistrationService copies to %LocalAppData%\Programs\Aperture, Start
  menu + optional Desktop .lnk, uninstall, --finish-move. No ProgID / .md
  association.
- After install or update, HKCU Run\Aperture is rewritten to the AppData
  exe when Start with Windows is on, so logon does not keep a Downloads
  path. An installed launch also repairs a stale Run value.
- Hamburger: (installed)/(portable), on-disk version mismatch, Install /
  Uninstall buttons next to the existing SETTINGS actions.

UNVERIFIED: live Authenticode on a GitHub asset; end-to-end install/update
restart; hamburger layout on a short display (WPF).
@piranout piranout changed the title feat: About+updater on hamburger, Start with Windows feat: About updater, Start with Windows, AppData install Aug 21, 2026
Promote the About/updater/install work from Unreleased so PR #1 ships as 0.8.1-beta1.
@piranout
piranout merged commit 06528ac into main Aug 21, 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