diff --git a/CHANGELOG.md b/CHANGELOG.md index 5da9451..61037c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ Ce projet suit le [Versionnage Sémantique](https://semver.org/lang/fr/). --- +## [0.7.17] — 2026-09-05 + +### Corrigé +- **Le service `wgsecure-helper` ne démarrait jamais réellement** — cause racine des invites d'authentification qui persistaient malgré les v0.7.12 à v0.7.16. Lancé par le gestionnaire de services, l'exécutable ne reçoit aucune commande sur sa ligne d'appel : `win32serviceutil.HandleCommandLine()` se contentait alors d'afficher son aide et de sortir, sans jamais entrer dans le dispatcher de service. `SvcDoRun()` n'était donc jamais exécuté (d'où l'absence totale de fichier journal), le pipe n'existait jamais, et l'application retombait systématiquement sur l'élévation UAC. Le point d'entrée bascule désormais sur `servicemanager.PrepareToHostSingle()` + `StartServiceCtrlDispatcher()` quand le service est démarré par le SCM, et ne conserve `HandleCommandLine()` que pour les invocations manuelles (`install`, `start`, `debug`…). +- Un échec de création du journal fichier est désormais signalé dans le journal d'événements Windows (source « WGSecureHelper ») au lieu de rester totalement silencieux. + +--- + ## [0.7.16] — 2026-09-04 ### Corrigé diff --git a/Makefile b/Makefile index f1ba4df..666d6ed 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ ## ────────────────────────────────────────────── APP := wgsecure -VERSION := 0.7.16 +VERSION := 0.7.17 VENV := .venv PYTHON := $(VENV)/bin/python3 PIP := $(VENV)/bin/pip diff --git a/README.md b/README.md index 4edb5fd..741342a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🛡️ WGSecure (WGS) -🚀 v0.7.16 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard +🚀 v0.7.17 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard **WGSecure** est une interface graphique multiplateforme (Windows & Linux) pour gérer une connexion WireGuard avec une surcouche MFA (authentification à deux facteurs TOTP). @@ -210,4 +210,4 @@ WGSecure/ ## 👤 Auteur Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools) -Version : ![v0.7.16](https://img.shields.io/badge/v0.7.16-septembre%202026-2980b9?style=flat-square) — Septembre 2026 +Version : ![v0.7.17](https://img.shields.io/badge/v0.7.17-septembre%202026-2980b9?style=flat-square) — Septembre 2026 diff --git a/app/__init__.py b/app/__init__.py index d6fdecc..b84afa4 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,3 +1,3 @@ -__version__ = "0.7.16" +__version__ = "0.7.17" APP_NAME = "WGSecure" APP_SHORT = "WGS" diff --git a/app/service/helper_service.py b/app/service/helper_service.py index 45dc84a..224dbff 100644 --- a/app/service/helper_service.py +++ b/app/service/helper_service.py @@ -23,6 +23,7 @@ import logging import os import re import subprocess +import sys from logging.handlers import RotatingFileHandler import pywintypes @@ -271,7 +272,18 @@ class WGSecureHelperService(win32serviceutil.ServiceFramework): servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, ""), ) - logger = _get_logger() + # La création du journal fichier est elle-même faillible (dossier + # non inscriptible…) : sans ce garde-fou, un échec ici laisserait + # zéro trace nulle part. Le journal d'événements Windows sert donc + # de canal de dernier recours (Observateur d'événements → + # Applications, source « WGSecureHelper »). + try: + logger = _get_logger() + except Exception as e: + servicemanager.LogErrorMsg( + f"WGSecureHelper : journal fichier impossible ({e})") + raise + logger.info("Service démarré") try: self._serve_forever(logger) @@ -281,6 +293,8 @@ class WGSecureHelperService(win32serviceutil.ServiceFramework): # exploitable ici plutôt qu'un service qui disparaît en # silence sans rien dans le log. logger.exception("Arrêt inattendu de la boucle principale") + servicemanager.LogErrorMsg( + "WGSecureHelper : arrêt inattendu, cf. helper.log") finally: logger.info("Service arrêté") @@ -327,4 +341,17 @@ class WGSecureHelperService(win32serviceutil.ServiceFramework): if __name__ == "__main__": - win32serviceutil.HandleCommandLine(WGSecureHelperService) + if len(sys.argv) == 1: + # Lancé par le gestionnaire de services (SCM), qui n'ajoute aucune + # commande à la ligne d'appel : il faut entrer explicitement dans le + # dispatcher. `HandleCommandLine()` seul, dans ce cas, se contente + # d'afficher son aide et de sortir — le service démarrait donc puis + # s'arrêtait aussitôt, sans jamais exécuter SvcDoRun (d'où l'absence + # totale de fichier journal et un pipe qui n'existait jamais, l'app + # retombant alors systématiquement sur l'élévation UAC). + servicemanager.Initialize() + servicemanager.PrepareToHostSingle(WGSecureHelperService) + servicemanager.StartServiceCtrlDispatcher() + else: + # Invocation manuelle : install / remove / start / stop / debug… + win32serviceutil.HandleCommandLine(WGSecureHelperService) diff --git a/wgsecure.iss b/wgsecure.iss index ec46eb8..5c0c211 100644 --- a/wgsecure.iss +++ b/wgsecure.iss @@ -5,7 +5,7 @@ ; ────────────────────────────────────────────── #define MyAppName "WGSecure" -#define MyAppVersion "0.7.16" +#define MyAppVersion "0.7.17" #define MyAppPublisher "WGSecure" #define MyAppExeName "wgsecure.exe"