Files
PS_Launcher/installer
j.foucher 9de8e95910 v0.24.5 — Install Program Files, multi-PC DL reliability, polish UI
Installeur :
- Bascule en Program Files (autopf) avec PrivilegesRequired=admin.
  L'auto-update reste fonctionnel : LauncherSelfUpdater détecte le dossier
  protégé et lance PS_Launcher.Updater.exe via Verb=runas (UAC à chaque MAJ).
- build-installer.ps1 : détection ISCC.exe robuste (Program Files + LocalAppData
  pour install winget user-mode + PATH), messages d'erreur explicites avec URL
  et commande winget, suppression accents (compat PS 5.1 sans BOM).

Téléchargements multi-PC :
- DownloadManager : détection des connexions fermées prématurément (PHP-FPM
  request_terminate_timeout). Sans ça, segment marqué Completed=false sans
  exception → fichier sparse final avec trous → SHA-256 KO. Lance maintenant
  HttpResumableException(transient) pour que Polly retry au bon offset.
- ParallelDownloadSegments : 16 → 6 par défaut pour permettre plusieurs PCs
  simultanés sans saturer le pool PHP-FPM OVH (~30 workers).

UI :
- Fenêtre maximisée par défaut au démarrage (WindowState=Maximized).
- Fix maximize qui cachait le footer / barre de DL (WM_GETMINMAXINFO clamp
  sur work area, remplace le margin hack 7px imprécis).
- Sidebar : bloc info en bas avec PS_Launcher vX.Y.Z + IPv4 locale alignés.
- Copyright remonté plus près du footer (margin 28 → 8).
- Settings → Health checks : boutons ▲/▼ pour réordonner, CanExecute auto.
- HealthCheck refresh défaut : 5000 → 2000 ms.

Bug fix UI :
- MainViewModel.RebuildList preserve l'état du row actif pendant un DL.
  Sinon ouvrir Settings/License pendant un DL recréait les rows from scratch
  → UI affichait "Reprendre" + "Annuler" alors que le DL tournait. Les
  progress callbacks pointent maintenant sur _activeRow (résolution dynamique)
  au lieu de capturer le row local.

Defaults config :
- ServerBaseUrl : example.com → asterionvr.com (out-of-the-box).
- Vive Business Streaming check : HtcConnectionUtility → rrserver.

Backoffice (server/admin/licenses.php) :
- Action set_max_machines : bouton "Slots" pour ajuster max_machines à chaud
  sur une licence existante. Refus de descendre sous le nombre de machines
  déjà actives.

Build :
- AllowUnsafeBlocks=true sur PSLauncher.App.csproj (compat WinRT generator
  récent qui émet du code unsafe dans WinRTGenericInstantiation.g.cs).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 12:04:36 +02:00
..

PS_Launcher — Installeur

Génère un setup Windows (PSLauncher-Setup-{version}.exe) qui distribue le launcher principal + son updater dans Program Files\ASTERION VR\PSLauncher\.

Pré-requis

Build en une commande

Depuis la racine du repo :

powershell -ExecutionPolicy Bypass -File installer\build-installer.ps1

Ça enchaîne :

  1. dotnet publish src/PSLauncher.App -c ReleasePSLauncher.exe (~77 Mo)
  2. dotnet publish src/PSLauncher.Updater -c ReleasePSLauncher.Updater.exe (~10 Mo)
  3. ISCC PSLauncher.issinstaller/output/PSLauncher-Setup-X.Y.Z.exe

Le fichier final fait ~80 Mo (compression ultra Inno + binaires self-contained).

Distribution

Tu balances un seul .exe au client :

  • Il lance, choisit français/anglais, clique Suivant×3, c'est installé.
  • Raccourci bureau + menu Démarrer créés.
  • Désinstallation propre via Programmes et fonctionnalités.

Le cache utilisateur (%LocalAppData%\PSLauncher\config.json, logs, downloads partiels) n'est pas touché par l'install/désinstall — la license et les paramètres survivent.

Mise à jour du launcher

Le launcher se met à jour seul via PSLauncher.Updater.exe (cf. flow auto-update). Le client n'a pas besoin de rejouer l'installeur sauf changement majeur (TFM, déps).

Bumper la version

Avant de rebuild un installeur :

  1. src/PSLauncher.App/PSLauncher.App.csproj<Version>X.Y.Z</Version> (et AssemblyVersion / FileVersion)
  2. installer/PSLauncher.iss#define MyAppVersion "X.Y.Z"
  3. installer/build-installer.ps1

Côté serveur, mets aussi à jour manifest/versions.json section launcher avec la nouvelle version + URL de download du nouveau PSLauncher.exe (via le backoffice ou édition manuelle, puis php tools/sign-manifest.php).

Code-signing (optionnel)

Pour éviter le warning SmartScreen "éditeur inconnu", il faut signer PSLauncher.exe, PSLauncher.Updater.exe et PSLauncher-Setup-X.Y.Z.exe avec un certificat Authenticode (OV ~250 €/an, EV ~400 €/an, ou gratuit via SignPath pour OSS). Hors-scope du script actuel.