chore(release): v0.7.14
Remplace l'enregistrement du service wgsecure-helper (sc.exe create/ start via [Run]) par un appel Exec()+AddQuotes en Pascal script : l'échappement de guillemets imbriqués dans la chaîne Parameters produisait une commande sc.exe invalide, silencieusement, alors que la même commande fonctionnait lancée à la main. Le service n'était donc jamais enregistré malgré une installation "réussie". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,13 @@ Ce projet suit le [Versionnage Sémantique](https://semver.org/lang/fr/).
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [0.7.14] — 2026-09-04
|
||||||
|
|
||||||
|
### Corrigé
|
||||||
|
- **Le service `wgsecure-helper` n'était jamais enregistré par l'installeur.** Les entrées `[Run]` posant `sc.exe create ...` via l'échappement de guillemets `""` imbriqués d'Inno Setup produisaient une commande invalide — silencieusement : aucune erreur affichée pendant l'installation, alors que la même commande, lancée à la main avec une syntaxe équivalente, fonctionnait. Remplacé par un appel `Exec()` scripté (Pascal, `AddQuotes`) après la copie des fichiers, qui construit et lance la commande sans juggler des niveaux d'échappement de chaîne imbriqués. Même mécanisme pour la désinstallation (arrêt + suppression du service).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [0.7.13] — 2026-09-04
|
## [0.7.13] — 2026-09-04
|
||||||
|
|
||||||
### Corrigé
|
### Corrigé
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
## ──────────────────────────────────────────────
|
## ──────────────────────────────────────────────
|
||||||
|
|
||||||
APP := wgsecure
|
APP := wgsecure
|
||||||
VERSION := 0.7.13
|
VERSION := 0.7.14
|
||||||
VENV := .venv
|
VENV := .venv
|
||||||
PYTHON := $(VENV)/bin/python3
|
PYTHON := $(VENV)/bin/python3
|
||||||
PIP := $(VENV)/bin/pip
|
PIP := $(VENV)/bin/pip
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 🛡️ WGSecure (WGS)
|
# 🛡️ WGSecure (WGS)
|
||||||
|
|
||||||
🚀 v0.7.13 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard
|
🚀 v0.7.14 · 🐍 · 🪟🐧 · 🔐 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 :  — Septembre 2026
|
Version :  — Septembre 2026
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
__version__ = "0.7.13"
|
__version__ = "0.7.14"
|
||||||
APP_NAME = "WGSecure"
|
APP_NAME = "WGSecure"
|
||||||
APP_SHORT = "WGS"
|
APP_SHORT = "WGS"
|
||||||
|
|||||||
+51
-17
@@ -5,7 +5,7 @@
|
|||||||
; ──────────────────────────────────────────────
|
; ──────────────────────────────────────────────
|
||||||
|
|
||||||
#define MyAppName "WGSecure"
|
#define MyAppName "WGSecure"
|
||||||
#define MyAppVersion "0.7.13"
|
#define MyAppVersion "0.7.14"
|
||||||
#define MyAppPublisher "WGSecure"
|
#define MyAppPublisher "WGSecure"
|
||||||
#define MyAppExeName "wgsecure.exe"
|
#define MyAppExeName "wgsecure.exe"
|
||||||
|
|
||||||
@@ -59,20 +59,8 @@ Filename: "{tmp}\VC_redist.x64.exe"; Parameters: "/install /quiet /norestart"; S
|
|||||||
; (PrivilegesRequired=admin ci-dessus), donc pas d'UAC supplémentaire non plus.
|
; (PrivilegesRequired=admin ci-dessus), donc pas d'UAC supplémentaire non plus.
|
||||||
; `waituntilterminated` : l'app ne doit pas démarrer avant que wg.exe existe.
|
; `waituntilterminated` : l'app ne doit pas démarrer avant que wg.exe existe.
|
||||||
Filename: "{tmp}\wireguard-installer.exe"; StatusMsg: "Installation de WireGuard…"; Check: WireGuardNeedsInstall; Flags: waituntilterminated
|
Filename: "{tmp}\wireguard-installer.exe"; StatusMsg: "Installation de WireGuard…"; Check: WireGuardNeedsInstall; Flags: waituntilterminated
|
||||||
; Enregistre et démarre le service privilégié s'il a été fourni (cf. [Files]
|
|
||||||
; ci-dessus). "binPath= " avec l'espace après "=" est une exigence de la
|
|
||||||
; syntaxe sc.exe, pas d'Inno Setup — l'oublier fait échouer la commande.
|
|
||||||
Filename: "{sys}\sc.exe"; Parameters: "create WGSecureHelper binPath= ""{app}\wgsecure-helper.exe"" start= auto DisplayName= ""WGSecure Helper"""; StatusMsg: "Installation du service WGSecure Helper…"; Check: HelperServiceAvailable; Flags: runhidden
|
|
||||||
Filename: "{sys}\sc.exe"; Parameters: "start WGSecureHelper"; StatusMsg: "Démarrage du service WGSecure Helper…"; Check: HelperServiceAvailable; Flags: runhidden
|
|
||||||
Filename: "{app}\{#MyAppExeName}"; Description: "Lancer {#MyAppName}"; Flags: nowait postinstall skipifsilent
|
Filename: "{app}\{#MyAppExeName}"; Description: "Lancer {#MyAppName}"; Flags: nowait postinstall skipifsilent
|
||||||
|
|
||||||
[UninstallRun]
|
|
||||||
; Arrête puis supprime le service avant que ses fichiers ne disparaissent —
|
|
||||||
; sc.exe ignore silencieusement une commande sur un service déjà absent
|
|
||||||
; (ex. installeur généré sans le composant service), donc pas de Check ici.
|
|
||||||
Filename: "{sys}\sc.exe"; Parameters: "stop WGSecureHelper"; Flags: runhidden; RunOnceId: "StopWGSecureHelper"
|
|
||||||
Filename: "{sys}\sc.exe"; Parameters: "delete WGSecureHelper"; Flags: runhidden; RunOnceId: "DeleteWGSecureHelper"
|
|
||||||
|
|
||||||
[Code]
|
[Code]
|
||||||
function VCRedistNeedsInstall: Boolean;
|
function VCRedistNeedsInstall: Boolean;
|
||||||
var
|
var
|
||||||
@@ -90,9 +78,55 @@ begin
|
|||||||
Result := not FileExists(ExpandConstant('{pf}\WireGuard\wireguard.exe'));
|
Result := not FileExists(ExpandConstant('{pf}\WireGuard\wireguard.exe'));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function HelperServiceAvailable: Boolean;
|
// Enregistre et démarre le service privilégié (cf. app/service/) via
|
||||||
|
// Exec()+AddQuotes plutôt que des entrées [Run] à guillemets échappés
|
||||||
|
// ("" imbriqués) : une tentative précédente basée sur l'échappement de
|
||||||
|
// chaîne Inno Setup produisait une commande sc.exe invalide (silencieuse,
|
||||||
|
// aucune erreur visible pendant l'installation) alors que la même commande
|
||||||
|
// fonctionnait telle quelle lancée à la main — AddQuotes() gère le
|
||||||
|
// guillemetage de façon fiable, sans juggler des niveaux d'échappement
|
||||||
|
// imbriqués à la main.
|
||||||
|
procedure InstallHelperService;
|
||||||
|
var
|
||||||
|
ResultCode: Integer;
|
||||||
|
ExePath, Params: String;
|
||||||
begin
|
begin
|
||||||
// wgsecure-helper.exe est optionnel (skipifsourcedoesntexist dans
|
ExePath := ExpandConstant('{app}\wgsecure-helper.exe');
|
||||||
// [Files]) : n'enregistrer le service que si le binaire a bien été copié.
|
// Optionnel (skipifsourcedoesntexist dans [Files]) : n'enregistrer le
|
||||||
Result := FileExists(ExpandConstant('{app}\wgsecure-helper.exe'));
|
// service que si le binaire a bien été copié.
|
||||||
|
if not FileExists(ExePath) then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
Params := 'create WGSecureHelper binPath= ' + AddQuotes(ExePath) +
|
||||||
|
' start= auto DisplayName= ' + AddQuotes('WGSecure Helper');
|
||||||
|
Exec(ExpandConstant('{sys}\sc.exe'), Params, '', SW_HIDE,
|
||||||
|
ewWaitUntilTerminated, ResultCode);
|
||||||
|
|
||||||
|
Exec(ExpandConstant('{sys}\sc.exe'), 'start WGSecureHelper', '', SW_HIDE,
|
||||||
|
ewWaitUntilTerminated, ResultCode);
|
||||||
|
end;
|
||||||
|
|
||||||
|
// sc.exe ignore silencieusement une commande sur un service déjà absent
|
||||||
|
// (ex. installeur généré sans le composant service) : pas besoin de tester
|
||||||
|
// son existence avant d'arrêter/supprimer.
|
||||||
|
procedure UninstallHelperService;
|
||||||
|
var
|
||||||
|
ResultCode: Integer;
|
||||||
|
begin
|
||||||
|
Exec(ExpandConstant('{sys}\sc.exe'), 'stop WGSecureHelper', '', SW_HIDE,
|
||||||
|
ewWaitUntilTerminated, ResultCode);
|
||||||
|
Exec(ExpandConstant('{sys}\sc.exe'), 'delete WGSecureHelper', '', SW_HIDE,
|
||||||
|
ewWaitUntilTerminated, ResultCode);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure CurStepChanged(CurStep: TSetupStep);
|
||||||
|
begin
|
||||||
|
if CurStep = ssPostInstall then
|
||||||
|
InstallHelperService;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
|
||||||
|
begin
|
||||||
|
if CurUninstallStep = usUninstall then
|
||||||
|
UninstallHelperService;
|
||||||
end;
|
end;
|
||||||
|
|||||||
Reference in New Issue
Block a user