Skip to content

GeneralsOnline Easy Anti-Cheat update breaks launch: wrong executable, missing EAC install step #336

Description

@undead2146

Problem

Generals Online release 060526_QFE1 added Easy Anti-Cheat (EAC) via Epic Online Services. GenHub can still download and materialise the portable, but a profile launch no longer reaches multiplayer — the client is started the wrong way and the anti-cheat runtime is never installed.

Verified against the live CDN (https://cdn.playgenerals.online/manifest.json):

{
  "version": "060526_QFE1",
  "download_url": "https://cdn.playgenerals.online/GeneralsOnline_portable_060526_QFE1.zip",
  "size": 28302710,
  "release_notes": "www.playgenerals.online",
  "sha256": "5826aee8a0722d09bb07d67ff3c9314c86e866c24c7e64407a582b9545e96b52"
}

The portable layout changed in three ways GenHub does not handle:

1. The entry point moved. The official bootstrapper is now EAC_LaunchGeneralsOnline.exe. It wraps the game binary named in EasyAntiCheat/Settings.json (GeneralsOnlineZH_60.exe). GenHub still marks only generalsonlinezh_60.exe as the launch executable:

// GeneralsOnlineManifestFactory.cs — only GeneralsOnlineZH_60.exe gets IsExecutable = true
var targetExecutable = GameClientConstants.GeneralsOnline60HzExecutable;

ManifestVariantResolver and GameLauncher resolve the process from that flag, so GenHub bypasses EAC entirely.

2. EAC must be installed, not just copied. The portable ships EasyAntiCheat_EOS_Setup.exe alongside an EasyAntiCheat/ tree (certificates, localisation, Settings.json, splash). Running the game outside the official bootstrapper, or copying files into a workspace without running the EOS setup, leaves the anti-cheat service absent. GenHub's deliverer extracts into CAS and materialises to the workspace but has no install step for the EOS setup binary.

3. New files are not accounted for in detection or documentation. Extraction already walks all non-map files recursively, so most new paths land in the manifest automatically once a user updates. However, constants and client detection still assume the pre-EAC layout:

New path Role
EAC_LaunchGeneralsOnline.exe Official launch bootstrapper (should be IsExecutable)
EasyAntiCheat_EOS_Setup.exe EOS EAC installer — must run once per machine
EasyAntiCheat/ EAC runtime config (Settings.json points at GeneralsOnlineZH_60.exe)
EOSSDK-Win32-Shipping.dll Epic Online Services SDK
plugins/easyanticheat/, plugins/goanticheat/ In-process anti-cheat plugin DLLs
cacert.pem, crashpad_handler.exe, xaudio2_9redist.dll Supporting runtime files
GeneralsOnlineGameData/ Client data (GOSplash.bmp, MapCacheGO.ini)

GameClientConstants.GeneralsOnlineDlls and GeneralsOnlineClientIdentifier still key off generalsonlinezh_60.exe only; they do not recognise the EAC bootstrapper as the client entry point.

Why this was missed

The GeneralsOnline integration predates EAC. The manifest factory treats every extracted file as workspace content and picks the game binary as the sole executable. That was correct when GeneralsOnlineZH_60.exe was both the game and the launch target. The portable now separates bootstrapper, installer, and game binary, and GenHub has no concept of a post-extraction setup executable or a non-game launch wrapper.

Proposed work

  • Mark EAC_LaunchGeneralsOnline.exe as the launch executable in the 60Hz game-client manifest; keep GeneralsOnlineZH_60.exe as a non-launch workspace file (EAC loads it per EasyAntiCheat/Settings.json).
  • Run EasyAntiCheat_EOS_Setup.exe once after extraction or first launch, with idempotent detection so repeat installs are skipped. Decide whether this belongs in the deliverer, a dedicated post-install hook, or first-launch orchestration in GameLauncher.
  • Extend GameClientConstants / GeneralsOnlineClientIdentifier / GeneralsOnlineDlls for the EAC-era file set so detection, import, and hash registration stay aligned.
  • Surface a clear failure when EAC is required but not installed, rather than silently starting the bare game binary.
  • Confirm update/reconcile flows (GeneralsOnlineProfileReconciler) re-run the EOS setup when the portable version changes.

Acceptance criteria

  • A GeneralsOnline profile on 060526_QFE1 or later launches via EAC_LaunchGeneralsOnline.exe from the materialised workspace.
  • EAC is installed on first use; subsequent launches skip setup when already present.
  • The content manifest includes the full EAC file tree (EasyAntiCheat/, plugins/, EOS SDK, and supporting DLLs).
  • Launching with only GeneralsOnlineZH_60.exe (bypassing EAC) is not the default path and produces an actionable error if attempted.
  • Auto-update from a pre-EAC install to 060526_QFE1+ completes without leaving a workspace that cannot join multiplayer.

Notes

  • EAC is Windows-only; this issue does not affect macOS Alpha 5 work.
  • The CDN sha256 field is available for integrity verification but is not consumed by GenHub today.
  • Coordinate with the Generals Online team on whether the EOS setup supports silent/unattended flags suitable for GenHub automation.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugSomething isn't working rightContent-PipelineComponents of the content-pipeline systemFixIs 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