Releases: EDDataAPI/eddata-addon-launcher
Release list
v2.0.0-beta3 - Localization Infrastructure
Changelog
All notable changes to the EDData Addon Helper project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[Unreleased]
[2.0.0-beta3] - 2025-12-02
🌍 Internationalization
Localization Infrastructure (Weblate-Ready)
- Added RESX-based localization system for multi-language support
- English (en) - Default language with ~60 localization keys
- German (de) - Complete German translation
- New
LocalizeExtensionfor easy XAML binding:{loc:Localize Key=MainWindow_AddApp} Stringshelper class for code-behind access:Strings.Get("key"),Strings.Format("key", args)- Culture switching support via
Strings.SetCulture("de") - Localization test suite in
Tests/LocalizationTests.cs - Ready for Weblate integration (monolingual RESX format)
Language Selection
- Added language selector dropdown in main window (System/English/Deutsch)
- Language preference is saved and persisted across sessions
- "System" option automatically uses the operating system's language
🐛 Bug Fixes
- Fixed
steam://URL scheme being rejected as "invalid or unsafe URL" - Steam game launches now work correctly with proper protocol handler support
- Fixed Elite Dangerous edit dialog not allowing save when changing options (OK button stayed disabled)
[2.0.0-beta2] - 2025-12-01
🎉 Highlights
- Application Renamed: "Elite Dangerous Addon Launcher V2" → "EDData Addon Helper"
- Framework Upgrade: .NET 8.0 → .NET 10 LTS (supported until November 2028)
- Professional Installer: WiX Toolset MSI installer with full customization
- Elite Dangerous Auto-Detection: Automatic detection for Steam, Epic Games, and Frontier Standalone
🚀 Added
Elite Dangerous Launch Dialog
- New
EliteLaunchDialogfor selecting the launch method:- Standard Installation - Launch Frontier Launcher directly
- Steam Version - Launch via Steam (
steam://rungameid/359320) - Epic Games - Launch via Epic Games Store
- Legendary - Launch via Open-Source Legendary Launcher
- Browse Manually - Select custom path
- Three additional launch options:
- Auto Run (
/autorun) - Start game directly without launcher dialog - Auto Quit (
/autoquit) - Close launcher after game starts - VR Mode (
/vr) - Start Elite Dangerous in VR mode
- Auto Run (
- Dialog appears when adding AND editing Elite Dangerous entries
Auto-Detection for Elite Dangerous
- Steam Library Detection:
- Automatic detection via Windows Registry (
HKCU:\Software\Valve\Steam) - Parsing of
libraryfolders.vdffor all Steam libraries - Search for
EDLaunch.exein all Steam folders
- Automatic detection via Windows Registry (
- Epic Games Store Detection:
- Scanning all
.itemmanifest files in Epic folder - Detection via
AppName: "Eel"(Epic ID for Elite Dangerous) - Extraction of installation path from manifests
- Scanning all
- Frontier Standalone Detection:
- Check known installation paths:
C:\Program Files (x86)\Frontier\EDLaunch\EDLaunch.exeC:\Program Files\Frontier\Products\elite-dangerous-64\EDLaunch.exe
- Registry lookup:
HKLM:\SOFTWARE\WOW6432Node\Frontier Developments\Elite Dangerous
- Check known installation paths:
- Fallback to full computer scan if auto-detection fails
WiX Toolset MSI Installer
- Professional Windows Installer (
.msi) with WiX Toolset v6.0.2 - Features:
- License display during installation
- Custom installation directory selection
- Start menu and desktop shortcuts
- Automatic uninstaller registration
- Upgrade detection for clean updates
- Replaces NSIS/MSIX for better Windows integration
CI/CD Pipeline
- GitHub Actions workflow for automated builds
- Automatic release creation on tag push (
v*) - MSI installer automatically uploaded as release asset
- Uses
softprops/action-gh-release@v2
🔧 Changed
Framework & Dependencies
- Framework Upgrade: .NET 8.0 → .NET 10 LTS (
net10.0-windows10.0.22621.0) - Dependencies updated:
- MaterialDesignColors: 3.1.0 → 5.3.0
- MaterialDesignThemes: 5.3.0
- Newtonsoft.Json: 13.0.4
- Serilog: 4.3.0
- Serilog.Sinks.Console: 6.1.1
- Serilog.Sinks.File: 7.0.0
- gong-wpf-dragdrop: 4.0.0
UI/UX Improvements
- DataGrid Columns: Button columns set to
Autowidth for flexible sizing - Application Title: New application name "EDData Addon Helper" updated everywhere
- Window Titles: All window titles updated to new name
Project Rename
- Project file:
Elite Dangerous Addon Launcher V2.csproj→EDData Addon Helper.csproj - Assembly Name:
EDData Addon Helper - Root Namespace:
EDData_Addon_Helper - All XAML files updated with new namespace
🔒 Security
- 8 critical security fixes implemented:
- Process Execution Hardening (
UseShellExecute=false) - JSON Deserialization Security (
TypeNameHandling.None) - Path Traversal Protection with validation methods
- URL Protocol Whitelist Validation
- File Size Validation (1MB manifest limit)
- Comprehensive Exception Handling
- Profile Import Validation
- Settings Import Validation
- Process Execution Hardening (
🐛 Fixed
Compiler Warnings
- 130 compiler warnings eliminated in Debug configuration
- Field Initialization Warnings (string fields →
string.Empty) - Nullable Event Handler Warnings (
PropertyChangedEventHandler?) - Null Reference Analysis Warnings in UI components
Bug Fixes
- Added exception logging in profile loading
- Fixed double loop bug in process cleanup
- Fixed NullReferenceException in
Btn_Launch_Click - Fixed thread-unsafe
processListaccess - Fixed memory leak in
Profile.AppsCollectionChanged event - Removed deprecated
.csprojfile with typo
⚡ Performance
- Build Time: Reduced from 4.42s to 1.86s (-57%)
- Thread.Sleep() replaced with async Task.Delay() - No more UI blocking
- Epic Games Manifest Caching - ~70-80% fewer I/O operations
- Directory.GetFiles() with filter - Reduced memory footprint
- Process Handle Management - Using statements for proper cleanup
📦 Technical Details
New Files
EliteLaunchDialog.xaml/EliteLaunchDialog.xaml.cs- Launch method dialogConstants.cs- 35+ centralized application constantsPackage.wxs- WiX installer definition.github/workflows/build-release.yml- CI/CD pipeline
Build Output
- Installer:
EDData-Addon-Helper-2.0.0-beta2.msi - Size: ~55 MiB (self-contained with .NET Runtime)
- Target: Windows 10/11 x64
📋 Dependencies
| Package | Version |
|---|---|
| .NET | 10.0 LTS |
| MaterialDesignColors | 5.3.0 |
| MaterialDesignThemes | 5.3.0 |
| Newtonsoft.Json | 13.0.4 |
| Serilog | 4.3.0 |
| Serilog.Sinks.Console | 6.1.1 |
| Serilog.Sinks.File | 7.0.0 |
| gong-wpf-dragdrop | 4.0.0 |
| WiX Toolset | 6.0.2 |
For more information, see the Contributing Guidelines.
v2.0.0-beta2
Changelog
All notable changes to the EDData Addon Helper project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[Unreleased]
[2.0.0-beta2] - 2025-12-01
🎉 Highlights
- Application Renamed: "Elite Dangerous Addon Launcher V2" → "EDData Addon Helper"
- Framework Upgrade: .NET 8.0 → .NET 10 LTS (supported until November 2028)
- Professional Installer: WiX Toolset MSI installer with full customization
- Elite Dangerous Auto-Detection: Automatic detection for Steam, Epic Games, and Frontier Standalone
🚀 Added
Elite Dangerous Launch Dialog
- New
EliteLaunchDialogfor selecting the launch method:- Standard Installation - Launch Frontier Launcher directly
- Steam Version - Launch via Steam (
steam://rungameid/359320) - Epic Games - Launch via Epic Games Store
- Legendary - Launch via Open-Source Legendary Launcher
- Browse Manually - Select custom path
- Three additional launch options:
- Auto Run (
/autorun) - Start game directly without launcher dialog - Auto Quit (
/autoquit) - Close launcher after game starts - VR Mode (
/vr) - Start Elite Dangerous in VR mode
- Auto Run (
- Dialog appears when adding AND editing Elite Dangerous entries
Auto-Detection for Elite Dangerous
- Steam Library Detection:
- Automatic detection via Windows Registry (
HKCU:\Software\Valve\Steam) - Parsing of
libraryfolders.vdffor all Steam libraries - Search for
EDLaunch.exein all Steam folders
- Automatic detection via Windows Registry (
- Epic Games Store Detection:
- Scanning all
.itemmanifest files in Epic folder - Detection via
AppName: "Eel"(Epic ID for Elite Dangerous) - Extraction of installation path from manifests
- Scanning all
- Frontier Standalone Detection:
- Check known installation paths:
C:\Program Files (x86)\Frontier\EDLaunch\EDLaunch.exeC:\Program Files\Frontier\Products\elite-dangerous-64\EDLaunch.exe
- Registry lookup:
HKLM:\SOFTWARE\WOW6432Node\Frontier Developments\Elite Dangerous
- Check known installation paths:
- Fallback to full computer scan if auto-detection fails
WiX Toolset MSI Installer
- Professional Windows Installer (
.msi) with WiX Toolset v6.0.2 - Features:
- License display during installation
- Custom installation directory selection
- Start menu and desktop shortcuts
- Automatic uninstaller registration
- Upgrade detection for clean updates
- Replaces NSIS/MSIX for better Windows integration
CI/CD Pipeline
- GitHub Actions workflow for automated builds
- Automatic release creation on tag push (
v*) - MSI installer automatically uploaded as release asset
- Uses
softprops/action-gh-release@v2
🔧 Changed
Framework & Dependencies
- Framework Upgrade: .NET 8.0 → .NET 10 LTS (
net10.0-windows10.0.22621.0) - Dependencies updated:
- MaterialDesignColors: 3.1.0 → 5.3.0
- MaterialDesignThemes: 5.3.0
- Newtonsoft.Json: 13.0.4
- Serilog: 4.3.0
- Serilog.Sinks.Console: 6.1.1
- Serilog.Sinks.File: 7.0.0
- gong-wpf-dragdrop: 4.0.0
UI/UX Improvements
- DataGrid Columns: Button columns set to
Autowidth for flexible sizing - Application Title: New application name "EDData Addon Helper" updated everywhere
- Window Titles: All window titles updated to new name
Project Rename
- Project file:
Elite Dangerous Addon Launcher V2.csproj→EDData Addon Helper.csproj - Assembly Name:
EDData Addon Helper - Root Namespace:
EDData_Addon_Helper - All XAML files updated with new namespace
🔒 Security
- 8 critical security fixes implemented:
- Process Execution Hardening (
UseShellExecute=false) - JSON Deserialization Security (
TypeNameHandling.None) - Path Traversal Protection with validation methods
- URL Protocol Whitelist Validation
- File Size Validation (1MB manifest limit)
- Comprehensive Exception Handling
- Profile Import Validation
- Settings Import Validation
- Process Execution Hardening (
🐛 Fixed
Compiler Warnings
- 130 compiler warnings eliminated in Debug configuration
- Field Initialization Warnings (string fields →
string.Empty) - Nullable Event Handler Warnings (
PropertyChangedEventHandler?) - Null Reference Analysis Warnings in UI components
Bug Fixes
- Added exception logging in profile loading
- Fixed double loop bug in process cleanup
- Fixed NullReferenceException in
Btn_Launch_Click - Fixed thread-unsafe
processListaccess - Fixed memory leak in
Profile.AppsCollectionChanged event - Removed deprecated
.csprojfile with typo
⚡ Performance
- Build Time: Reduced from 4.42s to 1.86s (-57%)
- Thread.Sleep() replaced with async Task.Delay() - No more UI blocking
- Epic Games Manifest Caching - ~70-80% fewer I/O operations
- Directory.GetFiles() with filter - Reduced memory footprint
- Process Handle Management - Using statements for proper cleanup
📦 Technical Details
New Files
EliteLaunchDialog.xaml/EliteLaunchDialog.xaml.cs- Launch method dialogConstants.cs- 35+ centralized application constantsPackage.wxs- WiX installer definition.github/workflows/build-release.yml- CI/CD pipeline
Build Output
- Installer:
EDData-Addon-Helper-2.0.0-beta2.msi - Size: ~55 MiB (self-contained with .NET Runtime)
- Target: Windows 10/11 x64
📋 Dependencies
| Package | Version |
|---|---|
| .NET | 10.0 LTS |
| MaterialDesignColors | 5.3.0 |
| MaterialDesignThemes | 5.3.0 |
| Newtonsoft.Json | 13.0.4 |
| Serilog | 4.3.0 |
| Serilog.Sinks.Console | 6.1.1 |
| Serilog.Sinks.File | 7.0.0 |
| gong-wpf-dragdrop | 4.0.0 |
| WiX Toolset | 6.0.2 |
For more information, see the Contributing Guidelines.
v2.0.0-beta1
Changelog
All notable changes to the EDData Addon Helper project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[Unreleased]
[2.0.0-rc.1] - 2025-11-24
Added
- GitHub Actions CI/CD release pipeline with automated builds and installer generation
- NSIS installer with professional UI:
- License display during installation
- Custom installation directory selection
- Start menu and desktop shortcuts
- Automatic uninstaller registration
- PowerShell automation scripts:
build.ps1- Local build with optional NSIS installer generationrelease.ps1- Automated release management with version tagging
- Comprehensive documentation:
RELEASE_GUIDE.md- Step-by-step release proceduresCI_CD.md- CI/CD pipeline architecture and troubleshootingQUICKSTART.md- Quick reference for common development tasksINSTALLER_README.md- NSIS installer configuration guide
Security
- Implemented 8 critical security fixes:
- Process execution hardening (UseShellExecute=false)
- JSON deserialization security (TypeNameHandling.None)
- Path traversal protection with validation methods
- URL protocol whitelist validation
- File size validation (1MB manifest limit)
- Comprehensive exception handling throughout codebase
- Profile and settings import validation
Fixed
- Eliminated all 130 compiler warnings in Debug build configuration
- Field initialization warnings (string fields → string.Empty)
- Nullable event handler warnings (PropertyChangedEventHandler?)
- Null reference analysis warnings in UI components
[2.0.0-beta.1] - 2025-11-20
Added
- Comprehensive security audit report documenting 12 identified vulnerabilities
- Performance optimizations for Epic Games installation detection
- Thread-safe process list management
- Epic install cache with locking mechanism
Changed
- Epic Games installation cache to prevent repeated manifest scanning
- Thread-safe process list management with lock object (
_processListLock) - Static Epic install cache with thread-safe locking (
_epicInstallCache,_epicCacheLock) - Comprehensive exception logging in LegendaryConfigManager for better diagnostics
- Constants class with 35+ centralized application constants (replacing magic strings)
Changed
-
Performance: Replaced all Thread.Sleep() calls with async Task.Delay()
- Line 998: 5-second UI freeze now non-blocking (5-second wait loop →
await Task.Delay(5000)) - Line 757: EDLaunch detection race condition improved with polling + timeout (Thread.Sleep(2000) → intelligent polling with Stopwatch)
- Line 713: Worker thread blocking eliminated (Thread.Sleep(500) →
await Task.Delay(500)in async Task.Run) - Line 740: Process refresh delay non-blocking (Thread.Sleep(50) →
await Task.Delay(50))
- Line 998: 5-second UI freeze now non-blocking (5-second wait loop →
-
Memory: Improved IsEpicInstalled() method
- Added caching layer to prevent repeated manifest scans (~70-80% performance improvement for repeated calls)
- Result is cached using thread-safe Dictionary with lock synchronization
- Cache reduces I/O operations during application lifecycle
-
I/O Optimization: Directory.GetFiles() with filter parameter
- Changed from loading all files then filtering to using built-in filter
- Reduced memory footprint for directories with many files
- Line 1190:
Directory.GetFiles(dir)loop →Directory.GetFiles(dir, targetFile, SearchOption.TopDirectoryOnly)
-
Performance: Moved Path.GetFileNameWithoutExtension() outside loop
- Line 962: Calculate once before loop instead of per-iteration
- Minor but consistent performance improvement in process cleanup routine
-
Resource Management: Added using statements for Process objects
- Proper cleanup of process handles to prevent resource leaks
- All Process.Start() calls now wrapped in using statements (5 locations):
- ClickOnce application launch
- Legendary CLI process execution
- Web application launch
- Log file viewer process
- Update check process
-
Code Quality: All German log messages and comments converted to English
- 3 German error messages in Constants.cs converted to English
- All developer comments now in English for international collaboration
- Improved code consistency and maintainability
-
Architecture: Made LaunchApp() async
- Changed from
void LaunchApp()toasync Task LaunchApp() - Enables proper use of Task.Delay() without blocking UI thread
- Event handlers updated to use
awaitfor launch operations
- Changed from
-
Async Patterns: Enhanced async/await patterns throughout
- Btn_Launch_Click now properly awaits LaunchApp() calls
- Dispatcher.Invoke() with async lambdas for proper UI thread management
- Task.Run() lambdas now async for non-blocking operations
- Added ConfigureAwait(false) to fire-and-forget async operations
Fixed
-
Critical: Exception logging in profile loading
- Fixed silent failure in catch block (Line 196)
- Added proper logging:
Log.Error(ex, "Error loading profiles") - Exceptions now properly tracked for debugging
-
Critical: Double loop bug in process cleanup
- Removed duplicate loop that processed each item multiple times
- Fixed Lines 952-957: ProcessExitHandler was iterating twice over processList
- Process cleanup now handles each item exactly once
-
Critical: NullReferenceException in Btn_Launch_Click
- Added null-check guard before accessing CurrentProfile.Apps (Line 489)
- Changed to:
if (AppState.Instance.CurrentProfile?.Apps == null) return;
-
Critical: Fire-and-forget async without ConfigureAwait
- Fixed 10+ instances of SaveProfilesAsync() not properly awaited
- Added ConfigureAwait(false) to prevent context switching
- Prevents thread pool starvation in long-running operations
-
Critical: Thread-unsafe processList access
- Made processList private with proper synchronization
- Added
_processListLockobject for future thread-safe operations
-
Critical: Null validation in LoadSettingsAsync
- Fixed potential NullReferenceException from JsonConvert.DeserializeObject()
- Added null-check with default creation (Line 817)
-
Memory Leak: Profile.Apps CollectionChanged event
- Fixed event subscription without unsubscription in Profile.cs
- Added proper cleanup in property setter to prevent memory leaks
-
Compiler Warnings: Magic string duplicates
- Eliminated 15+ magic string duplicates that caused compiler warnings
- Centralized all strings in Constants.cs reducing warnings from 170 to 0
-
Removed deprecated .csproj file
- Deleted "Elite Dangerous Addon Launcer V2.csproj" (with typo)
- Project now uses only "Elite Dangerous Addon Launcher V2.csproj"
Optimized
-
Build Performance: Reduced build time from 4.42s to 1.86s (-57%)
- Parallel compilation more effective with constants
- Fewer duplicate symbol definitions
- More efficient incremental builds
-
Compiler Warnings: Reduced from 170 to 0 (100% reduction)
- All magic strings centralized to Constants.cs
- Proper null-safety patterns implemented
- Fire-and-forget async properly marked with discard operator (_)
Technical Details
New Constants.cs File
Added 35+ application constants:
- File names:
ProfilesFileName,SettingsFileName - Executable names:
EdLaunchExe,TargetGuiExe,VoiceAttackProcessName, etc. - Launch arguments:
ProfileArgumentPrefix,AutoLaunchArgument - Error messages: All user-facing error strings
- Window dimensions: Default min/max window heights
- Process timeouts and delays:
ProcessWaitTimeoutMs - Theme defaults:
DefaultTheme
Performance Metrics
| Metric | Before | After | Change |
|---|---|---|---|
| Build Time | 4.42s | 1.86s | -57% |
| Compiler Warnings | 170 | 0 | -100% |
| UI Thread Blocking | 5+ seconds | 0 | Eliminated |
| Epic Manifest Scans | Per launch | Cached | ~70-80% fewer |
| Process Handle Leaks | Possible | None | Fixed |
Threading Improvements
- All UI blocking calls converted to async/await patterns
- EDLaunch detection now uses intelligent polling instead of sleep
- Process cleanup utilizes proper resource disposal patterns
- Event subscriptions properly managed to prevent memory leaks
Code Quality Metrics
- Lines of Code: Reduced code duplication through Constants.cs
- Code Coverage: Thread-safety mechanisms improved with locks
- Maintainability: Single source of truth for all constants and messages
- Internationalization: Ready for future localization (all strings English)
Dependencies
- .NET 10.0 LTS (supported until November 2028)
- MaterialDesignThemes v5.3.0
- Newtonsoft.Json v13.0.4
- Serilog v4.3.0 with File sink v7.0.0 and Console sink v6.1.1
- gong-wpf-dragdrop v4.0.0
Breaking Changes
None
Deprecations
None
Known Issues
None
Migration Guide
No action required for users. All changes are internal optimizations and bug fixes.
Contributors
- Code Quality Review and Optimization: Session Date 24. November 2025
Version History Summary
Session: 24. November 2025
Focus: Critical bug fixes, performance optimization, code quality improvement, and internationalization
Commits:
9e01b5d- Implement top-3 critical performance optimizations: Replace Thread.Sleep with Task.Delay for non-blocking delaysd32df94- Implement 5 additional optimizations: Epic cache, Directory.GetFiles filter, Path pre-calculation, Process using-statements
Key Achievements:
- Fixed 6 critical bugs
- Implemented 9 performance optimizations
- Eliminat...