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
+1 -1
View File
@@ -1,3 +1,3 @@
__version__ = "0.7.16"
__version__ = "0.7.17"
APP_NAME = "WGSecure"
APP_SHORT = "WGS"
+29 -2
View File
@@ -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)