Skip to content

fix(installer): launch outside Setup and report a broken worlds venv - #187

Merged
lallaria merged 1 commit into
mainfrom
didi/python-uv-install-failure-457145
Oct 18, 2026
Merged

lallaria merged 1 commit into
mainfrom
didi/python-uv-install-failure-457145

Conversation

@lallaria

Copy link
Copy Markdown
Contributor

Scope

Windows installer launch and the worlds-venv bootstrap: a launcher started by Setup could not use a healthy worlds venv, and every later install failed with a misleading error.

Description

  • Inno Setup 6.7+ enables RedirectionGuard on Setup, and its direct children inherit it, so they cannot traverse the junction uv uses for its managed Python (WinError 448). The post-install and updater-relaunch [Run] entries now start the launcher through explorer.exe.
  • ModuleUpdate keeps the uv venv error in worlds_venv_error, disables installs while it is set, and no longer passes the frozen launcher exe to uv as --python.
  • The launcher shows a "Game installs are broken" dialog with the venv path and the uv error.
  • CI installs a pinned, SHA-256 checked Inno Setup 7.1.0 through .github/actions/install-inno-setup (Chocolatey and the runner image stop at 6.7.1) and builds with --no-signing --quiet-progress --messages-jsonl, re-emitting compiler messages as annotations.
  • Not covered by unit tests: the explorer launch and the CI Inno install/build steps; check the next CI-built installer with "Launch" ticked.

.github/actions/install-inno-setup/action.yml: New action that installs a pinned, SHA-256 checked Inno Setup 7.1.0 in portable mode and exports ISCC.
.github/workflows/build-release-test.yml: Install Inno through install-inno-setup instead of choco. Build with --no-signing --quiet-progress --messages-jsonl and re-emit compiler messages as annotations.
.github/workflows/release.yml: Same Inno install and build changes.
inno_setup.iss: Start the launcher through explorer.exe after install and on updater relaunch so it does not inherit the Setup RedirectionGuard.
ModuleUpdate.py: Move the venv bootstrap into _bootstrap_worlds_venv(). Keep the uv error in worlds_venv_error, disable installs on failure, and never pass the frozen exe as --python.
MultiWorld.py: Show a "Game installs are broken" dialog when the worlds venv could not be created, and share the frontend wait loop.
test/general/test_world_install.py: Cover the venv bootstrap failure, exception and success paths.
test/general/test_launcher_stack.py: Cover the explorer launch entries and the broken-venv dialog.
@lallaria
lallaria merged commit c0b9d36 into main Oct 18, 2026
16 checks passed
@lallaria
lallaria deleted the didi/python-uv-install-failure-457145 branch October 19, 2026 04:38
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