; ────────────────────────────────────────────── ; 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;