fix(setup): recover incomplete self-contained Builder runtimes #2449
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!2449
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/windows-runtime-recovery"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Windows setup can accept a Builder executable and installed marker even when its private .NET runtime is missing. Incomplete installations now enter recovery, and incomplete staging stops before publication. The diagnostic keeps the affected paths and possible antivirus quarantine cause so retrying setup is actionable; the original cause in #2423 remains unconfirmed.
Technical changes
Validation
Head
66f5ba8d8c89ba14330f8fbf118ff0d9b7ff5f47, rebased on main6f4f28ac.Earlier-head validation
On
4171896d, all applicable hosted checks passed. A disposable controlled installation with EXE/marker present and coreclr.dll missing recovered through actual downloads, verified/unpacked pinned official v2.1.0, and ran its private .NET8.0.33 managed CLI help with exit0; original source files stayed unchanged. This was not the reporter's unconfirmed missing-file cause or a full game test, and has not been repeated on the rebased head.Full suites on
dead3fcdversus base3e95ca68: Windows378/3/31 versus376/3/31; Linux385/2/25 versus385/2/23, with matching failing check identities. These are historical results, not checks of the current head.builder_ready(setup.c:529) checks the 12 startup files, which matches the csproj (SelfContained=true,PublishSingleFile=false), and it's used in all three places that matter. The tests are thorough.One fix before merge: the new error after unpacking (
setup.c:776) drops the old antivirus hint and the folder path. Defender quarantining files is a known cause (the "Wacatac" worklist row), and in that case "Run the setup again" just loops. Please put the hint and the path back.Restored the quarantine/history hint, affected executable and staging-folder paths, and refreshed the controlled native screenshot.
Rebased on
6f4f28ac, preserving #2367's portable-home paths and rollback publication. That integration also needed the portable startup fixture to include the production readiness helper and authored runtime files; its 14 scenarios now cover refusing an incomplete runtime and launching after restoration. The 56 file cases, three guard mutations and complete setup link pass. Full-suite comparison and current-head CI status are recorded in the updated description; the original reporter's cause remains unconfirmed.Looks good.
builder_readyis bounded correctly (path length checked before each copy, the EXE itself is checked at i=0, directories and zero-size files rejected) and it replaces the bare exists-check in all three places: installed reuse, the post-unpack gate beforepublish_install, andlaunch_installed. A missing runtime now falls through to recovery instead of launching a Builder that cannot start.Joey-Magnus's point about the dropped antivirus hint and folder path is fixed: the new message names the staged exe, the staging folder and the quarantine/history check, and says nothing was published. The #2367 portable-home paths and rollback publication are untouched.
CI is green on this head (Python source checks on Linux and Windows, Windows builder package and setup, Windows Vulkan, AppImage). The PR body is upfront about what is not validated (reporter's real cause, Linux game, the 2 known local failures matching base).
Nit, no action needed: the 12-file list has to follow the csproj publish format; the comment says so, and the new tests would catch drift on the setup side but not a csproj change.
github-sync referenced this pull request2026-11-12 06:22:54 +00:00