diff --git a/installer/PSLauncher.iss b/installer/PSLauncher.iss index f9e7775..3be871a 100644 --- a/installer/PSLauncher.iss +++ b/installer/PSLauncher.iss @@ -11,7 +11,7 @@ #define MyAppName "PROSERVE Launcher" #define MyAppShortName "PS_Launcher" -#define MyAppVersion "1.0.2" +#define MyAppVersion "1.0.3" #define MyAppPublisher "ASTERION VR" #define MyAppURL "https://asterionvr.com" #define MyAppExeName "PS_Launcher.exe" @@ -65,6 +65,14 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription Source: "..\src\PSLauncher.App\bin\Release\net8.0-windows10.0.17763.0\win-x64\publish\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion Source: "..\src\PSLauncher.Updater\bin\Release\net8.0-windows\win-x64\publish\{#MyUpdaterExeName}"; DestDir: "{app}"; Flags: ignoreversion Source: "..\docs\PS_Launcher-Guide-Utilisateur.pptx"; DestDir: "{app}\docs"; Flags: ignoreversion +; WebView2 Evergreen Bootstrapper (Microsoft, redistribuable). 1.6 MB. +; Téléchargé depuis https://go.microsoft.com/fwlink/p/?LinkId=2124703 +; Exécuté en silencieux à l'install SI WebView2 Runtime n'est pas déjà présent +; (vérification registre via la fonction Pascal IsWebView2Installed ci-dessous). +; Sans ça, sur un Win10/Server sans WebView2 préinstallé, la fenêtre du launcher +; reste toute blanche au démarrage parce que les contrôles WebView2 (Reports + +; Documentation) ne peuvent pas s'initialiser et plantent en silence le rendu UI. +Source: "redists\MicrosoftEdgeWebview2Setup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall; Check: not IsWebView2Installed [Icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" @@ -73,6 +81,14 @@ Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon [Run] +; Installe WebView2 Runtime si pas déjà présent. /silent /install = install +; non-interactif. Le bootstrapper télécharge ~150 MB depuis Microsoft (1-2 min +; selon la connexion). StatusMsg pour que l'utilisateur voie ce qu'il se passe. +; Code exit attendu : 0 (déjà installé OU install réussie). On ne fail pas le +; setup global même si ça échoue — le launcher logue ensuite l'absence si ça +; pose problème, plutôt que de bloquer toute l'installation pour ça. +Filename: "{tmp}\MicrosoftEdgeWebview2Setup.exe"; Parameters: "/silent /install"; StatusMsg: "Installation du composant Microsoft Edge WebView2 Runtime (~150 MB, peut prendre 1-2 min)..."; Check: not IsWebView2Installed; Flags: waituntilterminated + ; Règles firewall pour le cache LAN P2P. Profile=private,domain (PAS public) = ; safety net : même si l'utilisateur connecte le PC à un Wi-Fi public, le port ; reste fermé. Le filtre RFC1918 dans LanCacheServer.cs est la première barrière, @@ -92,3 +108,28 @@ Filename: "{sys}\netsh.exe"; Parameters: "advfirewall firewall delete rule name= ; binaires installés et le dossier d'install s'il est vide après. Type: filesandordirs; Name: "{app}\*.bak" Type: dirifempty; Name: "{app}" + +[Code] +// Détecte si Microsoft Edge WebView2 Runtime est déjà installé sur le système. +// Référence : https://learn.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution +// +// 3 emplacements registre possibles selon le contexte d'install du runtime : +// - HKLM 64-bit (machine-wide, install par admin) +// - HKLM 32-bit (machine-wide, parfois utilisé par les versions plus anciennes) +// - HKCU (user-only, install par utilisateur sans admin) +// +// La clé contient une valeur 'pv' avec la version installée. Présence non vide +// = runtime présent. Le check Edge classique (HKLM\...\Edge\BLBeacon) ne suffit +// pas parce qu'Edge stable ≠ WebView2 Runtime (deux composants distincts). +function IsWebView2Installed(): Boolean; +var + PV: String; +begin + Result := False; + if RegQueryStringValue(HKLM, 'SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}', 'pv', PV) and (PV <> '') and (PV <> '0.0.0.0') then + Result := True + else if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}', 'pv', PV) and (PV <> '') and (PV <> '0.0.0.0') then + Result := True + else if RegQueryStringValue(HKCU, 'Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}', 'pv', PV) and (PV <> '') and (PV <> '0.0.0.0') then + Result := True; +end; diff --git a/installer/redists/MicrosoftEdgeWebview2Setup.exe b/installer/redists/MicrosoftEdgeWebview2Setup.exe new file mode 100644 index 0000000..07eaf3a Binary files /dev/null and b/installer/redists/MicrosoftEdgeWebview2Setup.exe differ