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>
This commit is contained in:
@@ -1,19 +1,48 @@
|
||||
# Build complet : publish + Inno Setup
|
||||
#
|
||||
# Pré-requis :
|
||||
# Pre-requis :
|
||||
# - .NET 8 SDK
|
||||
# - Inno Setup 6.x (https://jrsoftware.org/isdl.php)
|
||||
#
|
||||
# Lancer depuis la racine du repo :
|
||||
# powershell -ExecutionPolicy Bypass -File installer\build-installer.ps1
|
||||
#
|
||||
# NB : ce fichier est volontairement sans accents pour rester compatible
|
||||
# PowerShell 5.1 (qui lit les .ps1 sans BOM en Windows-1252, pas UTF-8).
|
||||
|
||||
param(
|
||||
[string]$ISCC = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe"
|
||||
[string]$ISCC = ""
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$root = Split-Path -Parent $PSScriptRoot
|
||||
|
||||
# Resolution de ISCC.exe : argument explicite > emplacements connus > PATH.
|
||||
function Find-Iscc {
|
||||
param([string]$Hint)
|
||||
|
||||
if ($Hint -and (Test-Path $Hint)) { return $Hint }
|
||||
|
||||
# Couvre les installs system-wide (Program Files) et user-mode
|
||||
# (%LocalAppData%\Programs, emplacement par defaut quand winget installe sans admin).
|
||||
$candidates = @(
|
||||
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe",
|
||||
"C:\Program Files\Inno Setup 6\ISCC.exe",
|
||||
"$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe",
|
||||
"C:\Program Files (x86)\Inno Setup 5\ISCC.exe",
|
||||
"C:\Program Files\Inno Setup 5\ISCC.exe",
|
||||
"$env:LOCALAPPDATA\Programs\Inno Setup 5\ISCC.exe"
|
||||
)
|
||||
foreach ($c in $candidates) {
|
||||
if (Test-Path $c) { return $c }
|
||||
}
|
||||
|
||||
$cmd = Get-Command iscc -ErrorAction SilentlyContinue
|
||||
if ($cmd) { return $cmd.Source }
|
||||
|
||||
return $null
|
||||
}
|
||||
|
||||
Write-Host "==> dotnet publish PSLauncher.App (Release single-file)" -ForegroundColor Cyan
|
||||
dotnet publish "$root\src\PSLauncher.App\PSLauncher.App.csproj" -c Release --nologo
|
||||
if ($LASTEXITCODE -ne 0) { throw "publish PSLauncher.App failed" }
|
||||
@@ -22,12 +51,26 @@ Write-Host "==> dotnet publish PSLauncher.Updater (Release single-file)" -Foregr
|
||||
dotnet publish "$root\src\PSLauncher.Updater\PSLauncher.Updater.csproj" -c Release --nologo
|
||||
if ($LASTEXITCODE -ne 0) { throw "publish PSLauncher.Updater failed" }
|
||||
|
||||
if (-not (Test-Path $ISCC)) {
|
||||
throw "ISCC.exe introuvable à $ISCC. Installe Inno Setup ou passe -ISCC <chemin>."
|
||||
$resolved = Find-Iscc $ISCC
|
||||
if (-not $resolved) {
|
||||
Write-Host ""
|
||||
Write-Host "ERREUR : Inno Setup (ISCC.exe) introuvable." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "Installe Inno Setup 6 depuis :" -ForegroundColor Yellow
|
||||
Write-Host " https://jrsoftware.org/isdl.php" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host "Ou installation silencieuse via winget :" -ForegroundColor Yellow
|
||||
Write-Host " winget install JRSoftware.InnoSetup" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host "Une fois installe, relance ce script. Si ISCC.exe est dans un emplacement" -ForegroundColor Yellow
|
||||
Write-Host "non standard, passe le chemin via -ISCC :" -ForegroundColor Yellow
|
||||
Write-Host " .\installer\build-installer.ps1 -ISCC 'D:\Tools\Inno\ISCC.exe'" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
throw "ISCC.exe introuvable. Inno Setup n'est pas installe sur cette machine."
|
||||
}
|
||||
|
||||
Write-Host "==> Inno Setup compile" -ForegroundColor Cyan
|
||||
& $ISCC "$PSScriptRoot\PSLauncher.iss"
|
||||
Write-Host "==> Inno Setup compile (ISCC: $resolved)" -ForegroundColor Cyan
|
||||
& $resolved "$PSScriptRoot\PSLauncher.iss"
|
||||
if ($LASTEXITCODE -ne 0) { throw "ISCC failed" }
|
||||
|
||||
Write-Host ""
|
||||
|
||||
Reference in New Issue
Block a user