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
Problem
Generals Online release
060526_QFE1added 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 inEasyAntiCheat/Settings.json(GeneralsOnlineZH_60.exe). GenHub still marks onlygeneralsonlinezh_60.exeas the launch executable:ManifestVariantResolverandGameLauncherresolve the process from that flag, so GenHub bypasses EAC entirely.2. EAC must be installed, not just copied. The portable ships
EasyAntiCheat_EOS_Setup.exealongside anEasyAntiCheat/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:
EAC_LaunchGeneralsOnline.exeIsExecutable)EasyAntiCheat_EOS_Setup.exeEasyAntiCheat/Settings.jsonpoints atGeneralsOnlineZH_60.exe)EOSSDK-Win32-Shipping.dllplugins/easyanticheat/,plugins/goanticheat/cacert.pem,crashpad_handler.exe,xaudio2_9redist.dllGeneralsOnlineGameData/GOSplash.bmp,MapCacheGO.ini)GameClientConstants.GeneralsOnlineDllsandGeneralsOnlineClientIdentifierstill key offgeneralsonlinezh_60.exeonly; 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.exewas 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
EAC_LaunchGeneralsOnline.exeas the launch executable in the 60Hz game-client manifest; keepGeneralsOnlineZH_60.exeas a non-launch workspace file (EAC loads it perEasyAntiCheat/Settings.json).EasyAntiCheat_EOS_Setup.exeonce 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 inGameLauncher.GameClientConstants/GeneralsOnlineClientIdentifier/GeneralsOnlineDllsfor the EAC-era file set so detection, import, and hash registration stay aligned.GeneralsOnlineProfileReconciler) re-run the EOS setup when the portable version changes.Acceptance criteria
060526_QFE1or later launches viaEAC_LaunchGeneralsOnline.exefrom the materialised workspace.EasyAntiCheat/,plugins/, EOS SDK, and supporting DLLs).GeneralsOnlineZH_60.exe(bypassing EAC) is not the default path and produces an actionable error if attempted.060526_QFE1+completes without leaving a workspace that cannot join multiplayer.Notes
sha256field is available for integrity verification but is not consumed by GenHub today.Related
060526_QFE1correctly)