Bug rapporté : sur un poste client fraîchement installé, la fenêtre du
launcher reste TOUT BLANCHE. Aucune exception loguée, services en
arrière-plan fonctionnent (manifest fetché, LAN discovery active,
hosting alive), juste rien à l'écran. WebView2 confirmé installé, donc
ce n'était pas la cause.
Diagnostique : c'est un mode de panne classique de WPF sur certains
environnements où l'accélération matérielle DirectX échoue silencieusement.
La fenêtre est créée, la message loop tourne, mais rien ne se rend
visuellement. Aucune exception ne remonte parce que le pipeline graphique
échoue en dehors du try/catch managé.
Environnements à risque :
- Sessions Bureau à distance (RDP) — accélération matérielle limitée
- Machines virtuelles sans hardware accel (Hyper-V Gen 1, VirtualBox,
VMware basic)
- GPU Intel HD anciens avec drivers obsolètes
- Windows Server sans Desktop Experience
- PCs corporate avec GPU émulé (RDS, Citrix)
Fix : check au démarrage et fallback vers RenderMode.SoftwareOnly dans
3 cas :
1. RenderCapability.Tier == 0 — WPF lui-même dit "pas d'accel possible"
2. GetSystemMetrics(SM_REMOTESESSION) != 0 — session RDP détectée
3. Variable d'env PSLAUNCHER_SOFTWARE_RENDER=1 — override manuel
Le mode choisi est logué au démarrage (Tier=X RDP=Y EnvOverride=Z →
SoftwareOnly=W), donc en cas de re-rapport on saura immédiatement si
c'est ce code qui s'est déclenché.
Trade-off : rendu software ~30% plus lent sur le scroll et les
animations, mais visible vs INVISIBLE. Le bon trade-off.
Pour l'utilisateur déjà bloqué AVANT cette release : set la var
PSLAUNCHER_SOFTWARE_RENDER=1 dans les variables d'environnement Windows
de la session user (Paramètres → Système → À propos → Paramètres
système avancés → Variables d'environnement), puis relancer.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
83 lines
4.1 KiB
XML
83 lines
4.1 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<OutputType>WinExe</OutputType>
|
|
<TargetFramework>net8.0-windows10.0.17763.0</TargetFramework>
|
|
<SupportedOSPlatformVersion>10.0.17763.0</SupportedOSPlatformVersion>
|
|
<WindowsSdkPackageVersion>10.0.17763.41</WindowsSdkPackageVersion>
|
|
<UseWPF>true</UseWPF>
|
|
<Nullable>enable</Nullable>
|
|
<LangVersion>latest</LangVersion>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<!-- Le générateur WinRT (CsWinRT v2.x, déclenché par WebView2/UWP refs sur SDK récent)
|
|
émet du code unsafe dans WinRTGenericInstantiation.g.cs. Sans ce flag, build = CS0227. -->
|
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
<ApplicationIcon>Resources\favicon.ico</ApplicationIcon>
|
|
<AssemblyName>PS_Launcher</AssemblyName>
|
|
<Company>ASTERION VR</Company>
|
|
<Product>PROSERVE Launcher</Product>
|
|
<Copyright>© 2026 ASTERION VR — All rights reserved</Copyright>
|
|
<RootNamespace>PSLauncher.App</RootNamespace>
|
|
<Version>1.0.3</Version>
|
|
<AssemblyVersion>1.0.3.0</AssemblyVersion>
|
|
<FileVersion>1.0.3.0</FileVersion>
|
|
|
|
<!-- Single-file self-contained publish profile (used by `dotnet publish`) -->
|
|
<PublishSingleFile>true</PublishSingleFile>
|
|
<SelfContained>true</SelfContained>
|
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
|
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
|
|
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" />
|
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
|
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" />
|
|
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.1" />
|
|
<PackageReference Include="Markdig" Version="0.37.0" />
|
|
<PackageReference Include="Markdig.Wpf" Version="0.5.0.1" />
|
|
<PackageReference Include="Serilog" Version="4.0.2" />
|
|
<PackageReference Include="Serilog.Extensions.Hosting" Version="8.0.0" />
|
|
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
|
|
<PackageReference Include="Serilog.Sinks.Debug" Version="3.0.0" />
|
|
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.3" />
|
|
<!-- WebView2 (Edge Chromium) pour les onglets Report et Documentation.
|
|
Le runtime est pré-installé sur Win11 et auto-mis-à-jour via Windows
|
|
Update sur Win10 récent. Si absent, le contrôle affiche une erreur
|
|
et on aiguille l'user vers https://go.microsoft.com/fwlink/p/?LinkId=2124703 -->
|
|
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3792.45" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<ProjectReference Include="..\PSLauncher.Core\PSLauncher.Core.csproj" />
|
|
<ProjectReference Include="..\PSLauncher.Models\PSLauncher.Models.csproj" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Resource Include="Resources\Background.png" />
|
|
<Resource Include="Resources\pirulen.otf" />
|
|
<Resource Include="Resources\favicon.ico" />
|
|
<Resource Include="Resources\logo-asterion-white.png" />
|
|
</ItemGroup>
|
|
|
|
<!-- Après chaque `dotnet publish -c Release`, copie le single-file exe à la racine du repo
|
|
(C:\ASTERION\GIT\PS_Launcher\PS_Launcher.exe). ContinueOnError pour ne pas casser le
|
|
publish si une instance du launcher tourne et verrouille la cible — l'opérateur peut
|
|
killer et réessayer, ou simplement utiliser le binaire depuis bin\Release\... -->
|
|
<Target Name="CopyPublishedToRepoRoot" AfterTargets="Publish"
|
|
Condition=" '$(Configuration)' == 'Release' ">
|
|
<PropertyGroup>
|
|
<RepoRoot>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\..\'))</RepoRoot>
|
|
</PropertyGroup>
|
|
<Copy SourceFiles="$(PublishDir)$(AssemblyName).exe"
|
|
DestinationFolder="$(RepoRoot)"
|
|
SkipUnchangedFiles="false"
|
|
OverwriteReadOnlyFiles="true"
|
|
ContinueOnError="WarnAndContinue" />
|
|
<Message Importance="high" Text="Copied $(AssemblyName).exe to $(RepoRoot)" />
|
|
</Target>
|
|
|
|
</Project>
|