Bump to v3.1.3: single-instance lock + update/read-only reliability fixes

Fixes the chained-fault runaway Andre hit after an update (multiple copies
stacking, audio climbing to deafening, terminal kill to recover).

- Single-instance lock (SingleInstanceCoordinator + SingleInstanceDialog,
  wired in Program.Main). A named mutex makes two copies impossible. A second
  launch offers: switch to the running copy (default; surfaces it from the
  tray via a named activation event), or force the running copy closed and
  start fresh (Process.Kill, retried elevated if the target is elevated).
  This is the structural fix that makes the stacking runaway impossible.
- Prompt-free update exit. InstallUpdateAsync sets updatingInProgress before
  Application.Exit(); the close path's skipPrompt now honours it, so no
  unsaved-changes dialog (whose default button is Cancel) can abort the
  update's restart.
- Read-only persistence fix. BuildCurrentProfile now carries
  currentProfileReadOnly into the saved snapshot. Previously a deliberate
  save of a locked profile wrote ReadOnly=false, silently unlocking it on
  disk — which re-armed the save prompt that then blocked the update.
- In-process double-install guard. updateInstallStarted stops the ~4 s
  startup check and the background poll both staging an install + helper.
- Docs: About box, RELEASE_NOTES.md, readme.html + MANUAL.md ("Only one copy
  of RemSound runs at a time").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Ednunp
2026-05-31 17:33:11 +01:00
co-authored by Claude Opus 4.8
parent baf50baf73
commit 9ab0a1a20a
9 changed files with 467 additions and 24 deletions
+31
View File
@@ -20,6 +20,37 @@ internal sealed class AboutDialog : Form
/// updates" path.</summary>
private const string ReleaseNotes =
"""
RemSound v3.1.3
An important reliability fix. After an update, a
chain of small faults could line up and leave
RemSound misbehaving in the worst case, more than
one copy running at once with the sound getting
louder and louder. This release breaks that chain.
Only one copy at a time: RemSound now refuses to run
as two copies at once. If you open it while it's
already running, it offers to switch you to the copy
that's already going (it may be down in the system
tray), or if that copy is stuck to force it
closed and start fresh. This makes the "stacking
copies" runaway impossible.
Updates can't be blocked any more: when RemSound
updates itself and restarts, nothing is allowed to
get in the way of that restart. Previously an
"unsaved changes?" question could pop up at that
moment and quietly cancel the update.
Locked profiles stay locked: marking a profile as
read-only now survives saving it. Before, if you
deliberately saved a locked profile the lock was
silently lost which brought back the "save your
changes?" question and, in turn, could trip up an
update. Locked means locked.
Everything else from v3.1 is unchanged.
RemSound v3.1.2
A small accessibility fix for the system tray