Problem
GameLauncher monitors a CAS-symlinked executable by hash, because Windows reports the symlink
target hash as the process name. When the entry point is a bootstrapper, that hash names the
bootstrapper — not the binary it hands the session to.
The code already recognises this and warns rather than resolving it:
// The hash names the entry point, not the binary it hands the session to,
// and the child's own hash is not available here.
logger.LogWarning(
"[GameLauncher] Launching {Entry} through a bootstrapper under CAS symlinking; monitoring may track the wrong process", ...);
So a GeneralsOnline profile launched from a Steam installation under SymlinkOnly can track the
Easy Anti-Cheat bootstrapper as though it were the game, or fail discovery once the bootstrapper
exits.
The non-CAS branch handles this correctly — it substitutes ExpectedChildProcessName for the
monitored name. Only Steam + SymlinkOnly + bootstrapper is affected, which is why the Windows
validation on #343 did not surface it: that used a direct installation.
Approach
Resolve the expected child from the selected manifest and monitor its hash, failing with an
actionable error when the child's hash is unavailable rather than silently monitoring the wrong
one.
Worth confirming first whether the wrapped binary is reliably present in the GeneralsOnline
manifest with its own hash — the current comment asserts it is not available at this point, and
that assumption is what the fix has to overturn.
Present identically in release/alpha-4 (#343) and on the forward-port (#366). Raised by review on
#366 and deliberately deferred there to keep an unvalidated change off the Steam launch path.
Problem
GameLaunchermonitors a CAS-symlinked executable by hash, because Windows reports the symlinktarget hash as the process name. When the entry point is a bootstrapper, that hash names the
bootstrapper — not the binary it hands the session to.
The code already recognises this and warns rather than resolving it:
So a GeneralsOnline profile launched from a Steam installation under
SymlinkOnlycan track theEasy Anti-Cheat bootstrapper as though it were the game, or fail discovery once the bootstrapper
exits.
The non-CAS branch handles this correctly — it substitutes
ExpectedChildProcessNamefor themonitored name. Only Steam +
SymlinkOnly+ bootstrapper is affected, which is why the Windowsvalidation on #343 did not surface it: that used a direct installation.
Approach
Resolve the expected child from the selected manifest and monitor its hash, failing with an
actionable error when the child's hash is unavailable rather than silently monitoring the wrong
one.
Worth confirming first whether the wrapped binary is reliably present in the GeneralsOnline
manifest with its own hash — the current comment asserts it is not available at this point, and
that assumption is what the fix has to overturn.
Present identically in
release/alpha-4(#343) and on the forward-port (#366). Raised by review on#366 and deliberately deferred there to keep an unvalidated change off the Steam launch path.