diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/RunLockPort.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/RunLockPort.java
index d5088ab..70ad1c7 100644
--- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/RunLockPort.java
+++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/RunLockPort.java
@@ -16,18 +16,18 @@ import java.util.Optional;
*
Kontrollierten Startabbruch ermöglichen, wenn bereits eine Instanz läuft
*
*
- * Lock-Lifecycle (blockierender Pfad – headless und manueller GUI-Lauf):
+ * Lock-Lifecycle (blockierender Pfad – headless, manueller GUI-Lauf und Scheduler-Tick):
*
* - Lock beim Laufstart erwerben ({@link #acquire()})
* - Lock für die gesamte Dauer des Laufs halten
* - Lock am Laufende freigeben ({@link #release()}), auch bei Fehler
*
- * Lock-Lifecycle (nicht-blockierender Pfad – Scheduler-Tick):
- *
- * - Lock nicht-blockierend versuchen ({@link #tryAcquire()})
- * - Bei leerem Optional sofort mit {@code SkippedBusy} abbrechen
- * - Bei vorhandenem Handle in try-with-resources verwenden
- *
+ * Der Scheduler-Tick verwendet dieselbe blockierende Methode {@link #acquire()} wie
+ * der manuelle Laufpfad. {@link BatchRunProcessingUseCase#execute execute()} ruft
+ * {@link #acquire()} intern auf; das Ergebnis {@code LOCK_UNAVAILABLE} signalisiert
+ * dem Aufrufer, dass ein paralleler Lauf aktiv ist.
+ * {@link #tryAcquire()} ist für Aufrufer vorgesehen, die außerhalb des Use-Case
+ * einen schnellen, nicht-blockierenden Lock-Versuch benötigen.
*/
public interface RunLockPort {
diff --git a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/GuiConfigurationPropertiesWriter.java b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/GuiConfigurationPropertiesWriter.java
index bd1df95..984b4cd 100644
--- a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/GuiConfigurationPropertiesWriter.java
+++ b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/GuiConfigurationPropertiesWriter.java
@@ -2,6 +2,7 @@ package de.gecheckt.pdf.umbenenner.bootstrap.adapter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
+import java.nio.file.AccessDeniedException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
@@ -156,6 +157,9 @@ public final class GuiConfigurationPropertiesWriter implements GuiConfigurationF
private void copyFile(Path source, Path destination) {
try {
Files.copy(source, destination);
+ } catch (AccessDeniedException e) {
+ throw new GuiConfigurationWriteException(
+ "Konfiguration kann nicht gespeichert werden – Scheduler läuft.", e);
} catch (IOException e) {
throw new GuiConfigurationWriteException(
"Sicherungskopie konnte nicht erstellt werden: " + destination, e);