feat(gui): instance unique + mutex partagé installeur (P0-7)

Protection multi-instance GUI V6 : mutex kernel nommé sur Windows (partagé
avec l'installeur Inno via AppMutex), fcntl exclusif sur POSIX (dev/test).
3 tests unitaires, self-test OK, 0 régression gui_v6 (145 passed).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-25 18:01:28 +02:00
parent d4891f5cfd
commit 6476fe9f98
3 changed files with 120 additions and 2 deletions

View File

@@ -62,9 +62,24 @@ def main(argv=None) -> int:
setup_file_logging()
from gui_v6.app import AnonymisationApp
from gui_v6.single_instance import AlreadyRunningError, SingleInstance
application = AnonymisationApp()
application.mainloop()
guard = SingleInstance()
try:
guard.acquire()
except AlreadyRunningError:
try:
import tkinter.messagebox as mb
mb.showinfo("Anonymisation", "L'application est déjà ouverte.")
except Exception:
print("L'application est déjà ouverte.")
return 0
try:
application = AnonymisationApp()
application.mainloop()
finally:
guard.release()
return 0