Files
WGSecure/wgsecure.iss
T
tuxgyverandClaude Sonnet 5 7beb6deb7a chore(release): v0.7.12
Ajoute wgsecure-helper, un service Windows privilégié (LocalSystem)
qui installe/désinstalle le tunnel et pose/retire les règles NRPT
sans invite d'authentification répétée. L'ACL du service WireGuard
(v0.7.6) ne délègue que démarrer/arrêter un tunnel déjà installé,
jamais le créer/supprimer, ce que WGSecure fait pourtant à chaque
connexion/déconnexion — d'où les prompts qui persistaient malgré
v0.7.6-v0.7.11. Corrige aussi le handshake, qui échouait pour la même
raison (wg show sans élévation complète).

Purement additif : l'app retombe sur son chemin élevé existant si le
service est absent (composant optionnel dans l'installeur).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-04 18:15:08 +02:00

99 lines
5.3 KiB
Plaintext

; ──────────────────────────────────────────────
; WGSecure (WGS) — Script Inno Setup
; Installeur Windows complet : WGSecure + WireGuard +
; Visual C++ Redistributable, chacun installé en silence si absent.
; ──────────────────────────────────────────────
#define MyAppName "WGSecure"
#define MyAppVersion "0.7.12"
#define MyAppPublisher "WGSecure"
#define MyAppExeName "wgsecure.exe"
[Setup]
AppId={{8F3B2C1A-7D4E-4A9B-9C6F-1E2D3F4A5B6C}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={autopf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputDir=dist
OutputBaseFilename=wgsecure-{#MyAppVersion}-setup
Compression=lzma2
SolidCompression=yes
ArchitecturesAllowed=x64compatible
ArchitecturesInstallIn64BitMode=x64compatible
PrivilegesRequired=admin
[Languages]
Name: "french"; MessagesFile: "compiler:Languages\French.isl"
[Files]
Source: "dist\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
; Service privilégié optionnel (cf. app/service/, `make helper`) : installe/
; désinstalle le tunnel et pose/retire les règles NRPT (split-DNS) en
; LocalSystem, pour éviter une invite d'authentification à chaque connexion/
; déconnexion. skipifsourcedoesntexist : le build peut être absent (composant
; optionnel, pas encore généré sur toutes les machines de build) — dans ce
; cas l'app retombe simplement sur son chemin élevé existant.
Source: "dist\wgsecure-helper.exe"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist
; VC++ Redistributable x64 — téléchargé automatiquement par `make installer-deps` :
; https://aka.ms/vs/17/release/vc_redist.x64.exe → installer\VC_redist.x64.exe
Source: "installer\VC_redist.x64.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
; WireGuard pour Windows — prérequis à WGSecure (fournit wg.exe, le pilote
; tunnel et le service WireGuardTunnel$ que wireguard.py pilote). Téléchargé
; automatiquement par `make installer-deps` :
; https://download.wireguard.com/windows-client/wireguard-installer.exe
; → installer\wireguard-installer.exe
Source: "installer\wireguard-installer.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
[Run]
; Installation silencieuse du VC++ Redistributable si absent (corrige "Failed to load Python DLL: python312.dll")
Filename: "{tmp}\VC_redist.x64.exe"; Parameters: "/install /quiet /norestart"; StatusMsg: "Installation du composant Visual C++ Redistributable…"; Check: VCRedistNeedsInstall
; L'installeur officiel WireGuard s'exécute déjà sans assistant (juste une
; fenêtre de progression) : notre propre installeur tourne en admin
; (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.
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
[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]
function VCRedistNeedsInstall: Boolean;
var
Version: String;
begin
// Clé présente si VC++ 2015-2022 x64 (v14+) déjà installé
Result := not RegQueryStringValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\X64', 'Version', Version);
end;
function WireGuardNeedsInstall: Boolean;
begin
// WireGuard s'installe toujours dans le Program Files 64 bits, quelle que
// soit l'architecture de WGSecure : {pf} y pointe bien puisque
// ArchitecturesInstallIn64BitMode=x64compatible ci-dessus.
Result := not FileExists(ExpandConstant('{pf}\WireGuard\wireguard.exe'));
end;
function HelperServiceAvailable: Boolean;
begin
// wgsecure-helper.exe est optionnel (skipifsourcedoesntexist dans
// [Files]) : n'enregistrer le service que si le binaire a bien été copié.
Result := FileExists(ExpandConstant('{app}\wgsecure-helper.exe'));
end;