Skip to content

CAS-symlinked bootstrapper launches monitor the launcher's hash, not the game's #367

Description

@bobtista

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugSomething isn't working rightFixIs fixing somethingMajorSeverity: minor < major < criticalWIPWindowsRelated to Windows only

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions