Files
PS_Launcher/installer
j.foucher a6ea9b11af v1.0.2 — Conserver les sauvegardes et replays entre versions
Nouvelle option dans le popup « Mise à jour disponible » (case cochée par
défaut, décochable) : « Conserver les sauvegardes et replays de la version
précédente ». Après extraction du ZIP de la nouvelle version, le launcher
copie :
  • PROSERVE_UE_*/Saved/SaveGames/*.sav   (profils + progression Unreal)
  • PROSERVE_UE_*/Saved/Demos/*.replay    (replays de session pour debrief)

Source = version installée au plus haut SemVer autre que celle qu'on
vient d'installer (couvre upgrade ET ré-install). Le dossier projet UE est
déduit du nom de l'exe (PROSERVE_UE_5_7.exe → PROSERVE_UE_5_7/) — supporte
le passage UE_5_5 → UE_5_7 (renommage transparent : on copie du dossier
source vers le dossier cible, peu importe leur numéro UE).

Sémantique non-destructive : si la nouvelle install contient déjà un
fichier au même chemin (profil/replay bundlé dans le ZIP), il n'est PAS
écrasé. La version la plus à jour côté installer prime pour ce slot
précis ; les autres fichiers créés par l'opérateur en cours d'utilisation
sont copiés normalement. Liste des sous-dossiers + globs en table statique
(PreservedSavedSubdirs) pour faciliter l'ajout futur (Logs/Config user…).

Best-effort : exceptions IO loggées en warn mais l'install n'échoue pas
pour une copie qui foire (handle verrouillé, accès refusé). Si l'option
est décochée OU si aucune version précédente n'est installée, no-op
silencieux.

Côté UI : checkbox au-dessus des boutons Plus tard / Télécharger, avec
tooltip détaillant les deux chemins. État remonté via dialog.PreserveSaveGames
et lu par MainViewModel APRÈS l'écriture du .proserve-meta.json (donc
avant les redists & SteamVR merge). Pour les resumes de DL interrompus,
le défaut est TRUE (l'utilisateur a déjà confirmé la première fois).

i18n complète : FR/EN/CN/TH/AR/ES/DE pour le libellé de la case, le
tooltip et le StatusMessage « Copie des sauvegardes et replays depuis
vX.Y.Z (N fichiers)… ».

Bump : 1.0.1 → 1.0.2 (feature patch).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-22 18:03:57 +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.