Experienced Game Store Launcher Launcher β quality-of-life wrapper for game launchers on Windows
- Overview
- Features
- Installation
- Usage
- How It Works
- Project Structure
- CI/CD
- Legal
- Contributing
- Roadmap
- Support
- Licence
A quality-of-life wrapper for game launchers on Windows (e.g. Epic Games Store).
EGS-LL does not reverse-engineer, modify, or patch the launchers in any way. It exclusively uses publicly available Windows APIs (registry keys, filesystem operations, process monitoring) to automate tedious manual workarounds that users already perform.
When you move, back up, or restore a game folder that was installed through the Epic Games Store, the launcher refuses to recognise the existing files. Instead it shows "Destination folder is not empty" and insists on a full re-download β even though a perfectly valid .egstore backup folder with manifests is sitting right there.
Users have worked around this for years with a tedious manual dance:
- Rename the existing game folder (e.g.
RedDeadRedemption2βRedDeadRedemption22) - Click Install in the launcher (pointing at the same parent directory)
- Wait for the download to start (optionally let it reach ~3 % for stability)
- Pause the download
- Delete the newly created (mostly-empty) folder
- Rename the backup folder back to the original name
- Resume β the launcher detects the
.egstoredata and verifies instead of re-downloading
EGS-LL automates this entire process.
EGS-LL ships with two interfaces: a PowerShell CLI for scripting and a WinForms GUI for point-and-click operation. Both automate the same underlying recovery workflow.
| Feature | CLI | GUI | Status |
|---|---|---|---|
| Recover Install β automate the folder-swap verification trick | β | β | Implemented |
| List Games β show all EGS-managed games with install state | β | β | Implemented |
| Show Info β display EGS paths, config, and registry data | β | β | Implemented |
| Drive Scanning β find unregistered EGS games across all drives | β | β | Implemented |
| Automated Pause/Resume β three-tier cascade: UI Automation β process suspension β user prompt | β | β | Not implemented |
| Real-time Progress β coloured log and progress bar during recovery | β | β | Implemented |
| Backup & Restore β automatic backup with rollback on failure/cancel | β | β | Implemented |
- Windows 10/11
- Epic Games Store launcher installed
CLI only:
- PowerShell 5.1+ (ships with Windows)
GUI only:
- .NET Framework 4.8 (pre-installed on Windows 10 1903+ and Windows 11)
Download EGS-LL.exe from the latest release and run it. No installation required β it's a single portable executable.
The GUI requests administrator elevation on launch. This is needed for registry access and process suspension. See Trust & Verification below for details on what elevated access is used for and how to verify the binary.
# Clone the repository
git clone https://github.com/XAOSTECH/EGS-LL.git
cd EGS-LLPowerShell may block unsigned scripts by default. To allow EGS-LL to run:
# Allow local scripts to run (one-time setup)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Or allow for the current session only
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope ProcessLaunch EGS-LL.exe. The main window shows all detected EGS games with their install state.
| Action | How |
|---|---|
| Refresh | Click Refresh to reload games from EGS manifests |
| Scan Drives | Click Scan Drives to find unregistered game folders (.egstore) across all fixed drives |
| Recover | Select a game β click Recover Selected (or right-click β Recover) |
| EGS Info | Click EGS Info to view launcher paths and registry configuration |
The Source column shows where each game was detected: EGS (from manifests) or Scan (discovered on disk).
During recovery, a modal dialogue shows real-time progress with a coloured log. The GUI handles the entire folder-swap flow automatically β including pausing/resuming the EGS download process.
# List detected games
.\egs-ll.ps1 list
# Show EGS configuration and paths
.\egs-ll.ps1 info
# Recover an existing game folder
.\egs-ll.ps1 recover "Fortnite"
# Recover with a custom game folder path
.\egs-ll.ps1 recover "Fortnite" -GameDir "D:\Games\Fortnite"
# Emergency restore a backup folder
.\egs-ll.ps1 restore "D:\Games\MyGame"
# Skip confirmation prompts
.\egs-ll.ps1 recover "Fortnite" -Yesπ Example 1: Recover a game via CLI
.\egs-ll.ps1 recover "Red Dead Redemption 2"The tool will:
- Locate the game via EGS manifests
- Validate the
.egstoredirectory exists - Rename the folder out of the way
- Guide you through starting/pausing the install in EGS
- Swap the folders back
- EGS verifies existing files instead of re-downloading
π Example 2: Recover with a custom path
.\egs-ll.ps1 recover "Fortnite" -GameDir "E:\Games\Fortnite"Use -GameDir when the game folder exists but has no EGS manifest (e.g. copied from another machine).
π Example 3: Discover and recover an unregistered game via GUI
- Launch
EGS-LL.exe - Click Scan Drives β the scanner checks common game directories then performs a shallow scan of all fixed drives
- A game found on disk but missing from EGS manifests shows as Unregistered with source Scan
- Select it β click Recover Selected
- The recovery dialogue automates the entire flow including EGS process suspension
EGS-LL is an open-source project distributed as a portable .exe. The binary is currently unsigned, which means:
- Windows SmartScreen will show a "Windows protected your PC" warning the first time you run it
- The UAC prompt will show "Unknown publisher" instead of a verified name
This is normal for open-source software distributed outside of package managers. Signed code-signing certificates cost hundreds of pounds per year β we are evaluating free OSS signing via SignPath.io.
Every release includes a SHA256SUMS.txt file. To verify the binary matches what CI built:
# Download both EGS-LL.exe and SHA256SUMS.txt from the release
# Then verify the hash:
$expected = (Get-Content SHA256SUMS.txt).Split(' ')[0]
$actual = (Get-FileHash EGS-LL.exe -Algorithm SHA256).Hash
if ($expected -eq $actual) { Write-Host "β Hash matches" -ForegroundColor Green }
else { Write-Host "β Hash mismatch β do not run this file" -ForegroundColor Red }You can also compare the hash against the CI build log: open the build-gui workflow run for the release tag and check the "Collect artifacts" step output.
The GUI requests administrator privileges (requireAdministrator in the app manifest). Here is exactly what elevated access enables:
| Action | Why Elevated | What It Does |
|---|---|---|
| Registry read | HKLM keys require admin on some configurations |
Reads EGS install paths and launcher location (read-only, never writes) |
| Process suspension | OpenProcess with PROCESS_SUSPEND_RESUME |
Tier 2 fallback: freezes the EGS process to pause downloads via NtSuspendProcess |
| Filesystem operations | Game folders in Program Files may be ACL-restricted |
Renames/moves game folders during recovery |
The primary pause mechanism (Tier 1) uses Windows UI Automation to click the Pause button in EGS β this does not require elevation. Process suspension is only attempted as a fallback.
EGS-LL never:
- Writes to the Windows registry
- Modifies EGS launcher files
- Sends any data over the network
- Accesses files outside of game directories and EGS manifest paths
If you prefer not to run a pre-built binary, you can build from source with a single command:
dotnet build gui/EGS-LL.csproj -c ReleaseThe output is at gui/bin/Release/net48/EGS-LL.exe. Requires the .NET SDK 8.x.
EGS-LL reads:
HKLM\SOFTWARE\WOW6432Node\Epic Games\EpicGamesLauncherβ launcher install pathsHKLM\SOFTWARE\WOW6432Node\Epic Games\UnrealEngineLauncherβ data path overrides%ProgramData%\Epic\EpicGamesLauncher\Data\Manifests\*.itemβ game manifest files (JSON)- Per-game
.egstore\directories β chunk/staging manifests
The GUI automates the full flow end-to-end. The CLI guides the user through pause/resume steps manually.
ββββββββββββββββββββββββββββββββββββββββββββ
β User selects game to recover β
ββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βββββββββββΌβββββββββββ
β Read EGS manifests β
β Locate game folder β
βββββββββββ¬βββββββββββ
β
βββββββββββΌβββββββββββββββββββ
β Validate .egstore exists β
β (proves prior EGS install) β
βββββββββββ¬βββββββββββββββββββ
β
βββββββββββΌβββββββββββββββββββββββ
β Rename folder: Game β Game_bak β
βββββββββββ¬βββββββββββββββββββββββ
β
βββββββββββΌβββββββββββββββββββββββββββ
β Launch EGS install via URI scheme β
β com.epicgames.launcher://install/ β
βββββββββββ¬βββββββββββββββββββββββββββ
β
βββββββββββΌβββββββββββββββββββββββββββ
β Monitor for new folder creation β
β (FileSystemWatcher + polling) β
βββββββββββ¬βββββββββββββββββββββββββββ
β
βββββββββββΌβββββββββββββββββββββββββββ
β Pause download (three-tier) β
β 1. UI Automation (click Pause) β
β 2. NtSuspendProcess (fallback) β
β 3. User prompt (manual pause) β
βββββββββββ¬βββββββββββββββββββββββββββ
β
βββββββββββΌβββββββββββββββββββββββββββ
β Delete new folder β
β Rename Game_bak β Game β
βββββββββββ¬βββββββββββββββββββββββββββ
β
βββββββββββΌβββββββββββββββββββββββββββ
β Resume download (UIA or process) β
βββββββββββ¬βββββββββββββββββββββββββββ
β
βββββββββββΌβββββββββββββββββββββββββββ
β EGS verifies existing files β
β instead of re-downloading β
ββββββββββββββββββββββββββββββββββββ
The GUI includes a drive scanner that finds EGS games not registered in the launcher manifests:
- Phase 1 (fast): Checks common game directories (
Epic Games,Games,Program Files, etc.) on all fixed drives - Phase 2 (thorough): Shallow recursive scan (depth 2) of drive roots, skipping system directories
- Results are merged with manifest data β games found only on disk show as Unregistered with source Scan
EGS-LL/
βββ egs-ll.ps1 # CLI entry point
βββ lib/
β βββ registry.ps1 # EGS registry key reader
β βββ manifest.ps1 # .item / .egstore manifest parser
β βββ recovery.ps1 # Install recovery automation
β βββ utils.ps1 # Shared helpers (logging, validation)
βββ gui/
β βββ EGS-LL.csproj # .NET Framework 4.8 WinForms project
β βββ Program.cs # Entry point (admin elevation check)
β βββ app.manifest # UAC admin elevation manifest
β βββ Core/
β β βββ RegistryHelper.cs # Read-only EGS registry detection
β β βββ ManifestReader.cs # Parse EGS .item manifest files
β β βββ ProcessHelper.cs # Launch/detect/suspend/resume EGS
β β βββ RecoveryEngine.cs # Full recovery workflow orchestration
β β βββ DriveScanner.cs # Scan all drives for unregistered games
β β βββ UIAutomationHelper.cs # UIA-based EGS button interaction
β βββ Forms/
β βββ MainForm.cs # Main game library grid (dark theme)
β βββ RecoveryForm.cs # Modal recovery progress dialogue
βββ .github/workflows/
β βββ build-gui.yml # Reusable build workflow (callable)
β βββ release.yml # Release automation (dev-control template)
βββ docs/
β βββ README.md
β βββ CONTRIBUTING.md
β βββ CODE_OF_CONDUCT.md
β βββ SECURITY.md
βββ LICENSE
The project uses GitHub Actions for automated builds and releases.
| Workflow | Purpose |
|---|---|
| build-gui.yml | Builds the GUI on windows-latest. Reusable via workflow_call β the release workflow auto-discovers and triggers it. Also supports workflow_dispatch for standalone testing. |
| release.yml | Full release automation (changelog, GPG-signed tag, GitHub release with artifacts and checksums). Powered by the dev-control template. |
The GUI requires the .NET SDK (8.x) to build. The CI handles this automatically β you don't need the SDK installed locally.
# If you do have the SDK:
dotnet build gui/EGS-LL.csproj -c ReleaseThe release workflow passes the version tag to the build, embedding it in the executable. Manual/test builds default to "experimental".
This project is not affiliated with, endorsed by, or associated with Epic Games, Inc.
EGS-LL operates exclusively as an external wrapper. It:
- Does not modify, patch, or inject into the Epic Games Store launcher binary
- Does not reverse-engineer any proprietary protocols or obfuscation
- Does not bypass any DRM, authentication, or licence checks
- Only reads publicly accessible registry keys and user-owned files on disk
- Only automates filesystem operations (rename/move) that users already perform manually
- Only interacts with the launcher through its public URI scheme and standard Windows process APIs
Use of this tool is at your own risk and subject to the Epic Games Store EULA. Review their terms before use.
Contributions welcome! Please read our Contributing Guidelines before submitting PRs.
Please keep the wrapper-only philosophy in mind:
- No launcher binary modification
- No network interception or MITM
- No memory injection or hooking
- Registry reads only (no writes to EGS-owned keys)
- Filesystem operations on user-owned game directories only
See also: Code of Conduct | Security Policy
- Install recovery automation (folder-swap verify trick)
- Game listing with install state
- EGS installation info display
- GUI wrapper with dark theme
- Automated pause/resume β three-tier cascade (UI Automation β NtSuspendProcess β user prompt)
- Drive scanning for unregistered games (BFS, one-per-drive, reparse-point safe)
- CI build pipeline (GitHub Actions, Windows runner)
- Dynamic versioning (tag β version, manual β experimental)
- SHA256 checksums in releases
- Batch recovery for multiple games
- Code signing via SignPath.io (free for OSS)
- Support for additional launchers
See the open issues for a full list of proposed features and known issues.
- π» Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
Distributed under the GPL-3.0 Licence. See LICENCE for more information.