chore(release): v0.7.17

Corrige la cause racine des invites d'authentification persistantes :
le service wgsecure-helper ne démarrait jamais réellement. Lancé par
le SCM (sans commande sur la ligne d'appel), HandleCommandLine() se
contentait d'afficher son aide et de sortir, sans entrer dans le
dispatcher — SvcDoRun n'était donc jamais exécuté, aucun journal
n'était créé, le pipe n'existait jamais, et l'app retombait toujours
sur l'élévation UAC. Bascule sur PrepareToHostSingle() +
StartServiceCtrlDispatcher() quand argv est vide.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 08:03:48 +02:00
co-authored by Claude Sonnet 5
parent b4f85c5605
commit f73908a358
6 changed files with 42 additions and 7 deletions
+8
View File
@@ -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 ## [0.7.16] — 2026-09-04
### Corrigé ### Corrigé
+1 -1
View File
@@ -4,7 +4,7 @@
## ────────────────────────────────────────────── ## ──────────────────────────────────────────────
APP := wgsecure APP := wgsecure
VERSION := 0.7.16 VERSION := 0.7.17
VENV := .venv VENV := .venv
PYTHON := $(VENV)/bin/python3 PYTHON := $(VENV)/bin/python3
PIP := $(VENV)/bin/pip PIP := $(VENV)/bin/pip
+2 -2
View File
@@ -1,6 +1,6 @@
# 🛡️ WGSecure (WGS) # 🛡️ 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). **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 ## 👤 Auteur
Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools) 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
+1 -1
View File
@@ -1,3 +1,3 @@
__version__ = "0.7.16" __version__ = "0.7.17"
APP_NAME = "WGSecure" APP_NAME = "WGSecure"
APP_SHORT = "WGS" APP_SHORT = "WGS"
+29 -2
View File
@@ -23,6 +23,7 @@ import logging
import os import os
import re import re
import subprocess import subprocess
import sys
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
import pywintypes import pywintypes
@@ -271,7 +272,18 @@ class WGSecureHelperService(win32serviceutil.ServiceFramework):
servicemanager.PYS_SERVICE_STARTED, servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_, ""), (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é") logger.info("Service démarré")
try: try:
self._serve_forever(logger) self._serve_forever(logger)
@@ -281,6 +293,8 @@ class WGSecureHelperService(win32serviceutil.ServiceFramework):
# exploitable ici plutôt qu'un service qui disparaît en # exploitable ici plutôt qu'un service qui disparaît en
# silence sans rien dans le log. # silence sans rien dans le log.
logger.exception("Arrêt inattendu de la boucle principale") logger.exception("Arrêt inattendu de la boucle principale")
servicemanager.LogErrorMsg(
"WGSecureHelper : arrêt inattendu, cf. helper.log")
finally: finally:
logger.info("Service arrêté") logger.info("Service arrêté")
@@ -327,4 +341,17 @@ class WGSecureHelperService(win32serviceutil.ServiceFramework):
if __name__ == "__main__": 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)
+1 -1
View File
@@ -5,7 +5,7 @@
; ────────────────────────────────────────────── ; ──────────────────────────────────────────────
#define MyAppName "WGSecure" #define MyAppName "WGSecure"
#define MyAppVersion "0.7.16" #define MyAppVersion "0.7.17"
#define MyAppPublisher "WGSecure" #define MyAppPublisher "WGSecure"
#define MyAppExeName "wgsecure.exe" #define MyAppExeName "wgsecure.exe"