New System Support
- Commander Genius — Added support for the Commander Keen engine recreation, including an intelligent launch strategy that:
- Automatically parses the
cgenius.cfgconfig to resolve the data/games directory. - Handles
${HOME}and${BIN}variable expansion in config paths. - Extracts ZIP/7z/RAR archives and automatically locates Keen game data files (
.CK1–.CK6). - Flattens nested folder structures and cleans up temp files after launch.
- Includes dedicated system image and setup documentation.
- Automatically parses the
Improved DOSBox Support
- Full DOSBox launch strategy with intelligent game file detection — automatically finds
.conf,.bat,.exe, and.comfiles inside archives or folders. - ISO and CHD support for DOSBox — Mounts ISO files to scan for executables, then generates a DOSBox config with native
imgmountcommands. CHD files are mounted via CHDMounter and launched via DOSBox cdrom mount. - DOSBox file selection dialog — When multiple game files are found, presents a clean selection window with file names and relative paths.
- "Group Files by Folder" extended to DOSBox — Now works with DOSBox-based emulators (DOSBox, DOSBox-X, DOSBox Staging, dosbox-pure).
-conf %ROM%auto-injection — Automatically inserts the-confflag when launching via DOSBox if not already present.
UI/UX Improvements
- New minimize-to-tray function — Allow Simple Launcher to remain open in the tray.
- System context menu — Right-click on system buttons now shows Edit and Delete actions, passing the pre-selected system name.
- Markdown rendering enhancements — Improved Markdown styling with proper headings, code blocks, tables, lists, blockquotes, and horizontal rules in release notes and help content.
New Parameter Placeholder
%NAME%— Resolves to the ROM filename without path or extension. Useful for emulators that expect just the game name (e.g., Commander Geniusdir="games/%NAME%").
Improved Error Handling
- Batch file error reporting — Batch file failures now show a detailed error dialog with the option to open the error log. Batch file contents are also logged on failure for easier debugging.
- Batch file working directory validation — Validates that the working directory exists before executing batch files.
- Unicode normalization for file paths — Files created on macOS (NFD) can now be found on Windows (NFC) by trying multiple Unicode normalization forms, preventing "file not found" errors.
- Access denied handling for Updater — The updater now handles Win32 access denied errors gracefully with a user-friendly message and download page redirect.
- COMException rendering detection — Detects WPF render thread failures (UCEERR_RENDERTHREADFAILURE) caused by GPU driver issues or per-pixel transparency.
HTTP Resilience
- Replaced custom retry logic with Polly resilience handler — HTTP downloads now use
Microsoft.Extensions.Http.Resiliencewith exponential backoff and jitter (5 retry attempts, 2-second base delay).
Single Instance Improvements
- Improved single-instance behavior — Launching a second instance now restores the existing window instead of showing an error message. Uses named events for cross-process signaling with a fallback to window enumeration.
Sound Service
- Replaced Windows MediaPlayer with NAudio 2.3.0 — Sound playback no longer requires UI thread dispatcher invocations, improving reliability and eliminating thread-affinity issues.
- Registered
IPlaySoundEffectsinterface — Added proper DI registration for sound effects service.
MVVM Migration to CommunityToolkit.Mvvm
- Migrated all ViewModels from custom
ViewModelBaseandRelayCommandinfrastructure to CommunityToolkit.Mvvm 8.4.2. - Created dedicated ViewModels for AboutWindow (
AboutViewModel), ImageViewer (ImageViewerViewModel), SetFuzzyMatching (SetFuzzyMatchingViewModel), DebugWindow, and GlobalStatsWindow. - Added unit tests for
DebugViewModel,GameVerificationViewModel, andGlobalStatsViewModel.
Service Extraction from MainWindow
LoadingOverlayService— Extracted loading overlay management with operation counting (SetLoadingState,EmergencyRelease).StartupInitializationService— Consolidated startup logic (first-run wizard, MS Store scanning, game loading).GameListUIService— Extracted UI state management (grid/list mode, game button image cleanup, pagination).ThemeMenuService— Extracted theme switching logic (base themes + accent colors).LanguageMenuService— Extracted language switching with checkmark management.
Code Refactoring
- Injected
ILogErrorsvia constructor/parameter — ReplacedServiceProviderresolution with proper constructor and parameter injection across favorites page, global search, context menu services, game button factory, and mount services. - Standardized emulator detection checks — Unified null-conditional access pattern for emulator detection checks (Azahar, Citra, DuckStation, Geolith, MAME, Ootake, Raine, RetroArch, Sameboy, Xemu).
Dokan Driver Validation
- New
DokanValidationclass — Uses P/Invoke directly againstdokan2.dllto check if Dokan is installed before any mount operation. - Provides clear error messages when Dokan is missing for ZIP/CHD mounts.
- Dokan localization — Added localized strings for Dokan driver not found dialog with option to open download page.
Dependency Updates
CommunityToolkit.Mvvm8.4.2 (new)NAudio2.3.0 (new, replaces Windows MediaPlayer)Microsoft.Extensions.Http.Resilience10.6.0 (new, Polly resilience handler)MessagePack3.1.4 → 3.1.6YamlDotNet17.1.0 → 18.0.0SharpCompress→ 0.48.1Tomlyn2.3.2 → 2.4.0Microsoft.Data.Sqlite10.0.7 → 10.0.8Microsoft.Extensions.*10.0.7 → 10.0.8Microsoft.CodeAnalysis.NetAnalyzers10.0.203 → 10.0.300
Full Changelog: release5.4.0...release5.5.0