fix(FxController): validate and repair startup Run registry key path on stale binary locations#536
Open
akai07 wants to merge 5 commits into
Open
fix(FxController): validate and repair startup Run registry key path on stale binary locations#536akai07 wants to merge 5 commits into
akai07 wants to merge 5 commits into
Conversation
… in OnDeviceStateChanged - Filter capture (eRender) device events in OnDeviceStateChanged via IMMEndpoint.GetDataFlow to prevent unnecessary playback reinit when input devices change state - Track reconnected device GUID when state transitions to ACTIVE - Add reconnection detection in sndDevicesImplementDeviceRules to auto-select reconnected playback devices (fixes BT headset reconnect after UNPLUGGED) - Clear reconnection state on reinit
… system resume - Call SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED) when audio processing starts to prevent system sleep during playback - Revert to SetThreadExecutionState(ES_CONTINUOUS) when processing stops - Handle PBT_APMRESUMEAUTOMATIC power event: check device changes and restore power state after system resume from sleep - Clear execution state on controller destruction
…sizing and alpha Replaced LoadIcon with LoadImage using explicit SM_CXSMICON/SM_CYSMICON dimensions so tray icons are rendered at the correct size for the notification area. LoadIcon uses default icon size which can cause scaling artifacts and improper alpha blending on Windows 10/11, especially in dark theme mode where transparency is critical.
…nges to same device When video applications (Plex, etc.) switch between audio tracks with different formats, Windows fires OnDefaultDeviceChanged even if the device itself hasn't changed — only the format/role has. This was causing the audio processing thread to restart unnecessarily, resulting in audible pauses during video playback. Fix: compare the new default device ID against our current playback device. If they match, skip the re-init since it's a format change on the same device, not an actual device switch.
After an update relocates the binary, the stale Run key path in HKCU\...\Run causes the app to not launch at boot even though the settings checkbox shows 'on' (the key exists but points to nowhere). Fixes: - isLaunchOnStartup: add error checking on all registry calls and validate the stored path matches the current executable path - setLaunchOnStartup: write REG_SZ with correct cbData size ((wcslen+1)*sizeof) instead of sizeof(szPath)=520 bytes which appended uninitialized stack data to the registry value - syncLaunchOnStartup: on each app init, detect stale Run key paths and re-write with the current executable path — automatically repairs startup after updates without user intervention
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes issue #483: after updating FxSound, the app no longer starts at boot even though the "Launch on system startup" checkbox shows as enabled. The root cause was that the Run registry key stored the old binary path from the previous install location.
Root Cause
When FxSound updates, the installer may place the new binary in a different path or the old binary location becomes stale. The
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runkey still points to the old path, so Windows tries to launch a non-existent binary at boot. The settings checkbox showed "on" becauseisLaunchOnStartup()only checked if the registry key exists (size > 0), not whether the path was valid.Changes
1.
isLaunchOnStartup()— Path validationRegOpenKeyEx(was silently ignoring failures)falseif the path is stale (binary moved/updated), so the checkbox shows the correct state2.
setLaunchOnStartup()— Correct REG_SZ sizeRegSetValueExcbDatafromsizeof(szPath)(520 bytes = uninitialized stack data) to(wcslen(szPath) + 1) * sizeof(wchar_t)GetModuleFileNameandRegOpenKeyEx3.
syncLaunchOnStartup()— Auto-repair stale pathsFxController::init()on every startupFiles Changed
fxsound/Source/GUI/FxController.h— AddedsyncLaunchOnStartup()declarationfxsound/Source/GUI/FxController.cpp— Rewrote startup registry handling with path validation and auto-repairRelated Issues