Skip to content

fix(install): only create CLI launcher shims when the packaged launcher supports them - #74

Merged
mcoliver merged 1 commit into
mainfrom
fix/install-shim-gate
Sep 30, 2026
Merged

mcoliver merged 1 commit into
mainfrom
fix/install-shim-gate

Conversation

@mcoliver

Copy link
Copy Markdown
Collaborator

Fixes #73.

openutv.com/install.ps1 redirects to this file. Since #63's installer changes, it has turned utvio/utvpkg/py-interp/utvls into copies of utv.exe for every release. Only launchers built with #63 dispatch on their own file name, and the current release (2026.9, built 09-27) predates it. So on a fresh Windows install:

  1. py-interp.exe (a copy of the 2026.9 launcher) starts the viewer.
  2. At startup the help-menu package runs openutv-check-updates.py through bin\\py-interp.exe, which opens another viewer, which checks for updates, which opens another viewer, and so on.

Fix

  • Create shims only when the downloaded package ships openutv-run.cmd (post-fix: resolve Windows CLI dependencies and implement OIIO image writing #63 builds). This is checked in the extracted package before it's moved into place, so files from a previous install can't fool it.
  • Otherwise, repair installs shimmed by the previous installer: keep the package's real <tool>.exe and remove the stale -bin copy. Re-running the installer fixes affected machines.
  • With shim support, always refresh <tool>-bin.exe from the package (previously a stale -bin blocked it).

Verification

Parsed with pwsh, and the shim logic was extracted from this file and run against simulated install folders:

Scenario Result
2026.9-style ZIP, fresh install real py-interp.exe / utvio.exe, no -bin
2026.9-style ZIP over a broken shimmed install (the #73 case) restored real binaries, stale -bin removed
post-#63 ZIP, fresh install launcher shims + real -bin
post-#63 ZIP over a stale shimmed install -bin refreshed from the package

Not run on a real Windows machine. The launcher-side hardening (never fall back to the viewer from a tool shim) follows in a separate PR.

The website repo's unused copy (public/install.ps1) is kept in sync in OpenUTV/www.openutv.com@b25b7dd.

🤖 Generated with Claude Code

…er supports them

openutv.com/install.ps1 redirects to this file. It turned
utvio/utvpkg/py-interp/utvls into copies of utv.exe (real binaries moved
to <tool>-bin.exe) for every release, but only launchers built with #63
dispatch on their own file name. With the current release (2026.9) the
shims started the viewer instead, and the viewer's startup update check
(run via py-interp.exe) relaunched the viewer every few seconds.

- Create shims only when the downloaded package ships openutv-run.cmd
  (post-#63 builds), checked before the package is moved into place.
- Otherwise repair installs shimmed by the previous installer: keep the
  package's real <tool>.exe and drop the stale -bin copy.
- With shim support, always refresh <tool>-bin.exe from the package.

Fixes #73

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
@mcoliver
mcoliver merged commit f64e047 into main Sep 30, 2026
5 checks 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.

fix: Windows startup loop

1 participant