Single-instance --------------- Two PSLauncher.exe instances ran in parallel during the user's last release build, locking the repo-root copy and breaking the publish. Two-layer protection: 1. App.xaml.cs uses a Global\ named Mutex (UUID-based key) created at OnStartup. If the mutex is already held, the second instance PostMessages a registered Windows message (PSLAUNCHER_BRING_TO_FRONT) to HWND_BROADCAST and Shutdown()s immediately. 2. MainWindow hooks WndProc via SourceInitialized + HwndSource.AddHook; when it sees the broadcast, it restores from minimized, calls ShowWindow(SW_RESTORE) + Activate() + SetForegroundWindow so the already-running instance pops to the user's foreground. Net result: clicking the launcher icon a second time pops the existing window instead of starting a duplicate process. Tolerant build pipeline ----------------------- - Both csproj post-publish copy targets now have ContinueOnError="WarnAndContinue". A locked PSLauncher.exe at the repo root no longer fails the entire publish — the binary still exists in bin\Release\...\publish\ and the user gets a warning instead of an error. - All four .bat scripts (build-launcher / build-updater / build-all / build-installer) now run `taskkill /F /IM PSLauncher.exe /T` and the same for PSLauncher.Updater.exe before the publish step. This defensively closes any stray instance left behind by previous tests so the build pipeline is clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
29 lines
896 B
Batchfile
29 lines
896 B
Batchfile
@echo off
|
|
REM Build de l'updater (PSLauncher.Updater.exe).
|
|
REM Sortie : C:\ASTERION\GIT\PS_Launcher\PSLauncher.Updater.exe (~34 Mo single-file)
|
|
REM L'updater accompagne PSLauncher.exe — il doit etre dans le meme dossier.
|
|
|
|
setlocal
|
|
set "REPO=%~dp0"
|
|
echo.
|
|
echo ==^> Termine les eventuelles instances qui verrouilleraient les .exe
|
|
taskkill /F /IM PSLauncher.exe /T >nul 2>&1
|
|
taskkill /F /IM PSLauncher.Updater.exe /T >nul 2>&1
|
|
echo.
|
|
echo ==^> dotnet publish PSLauncher.Updater (Release single-file)
|
|
echo.
|
|
|
|
dotnet publish "%REPO%src\PSLauncher.Updater\PSLauncher.Updater.csproj" -c Release --nologo
|
|
set "EXITCODE=%ERRORLEVEL%"
|
|
|
|
echo.
|
|
if %EXITCODE% NEQ 0 (
|
|
echo [ECHEC] Build de l'updater echoue avec le code %EXITCODE%.
|
|
) else (
|
|
echo [OK] PSLauncher.Updater.exe disponible a la racine du repo :
|
|
echo %REPO%PSLauncher.Updater.exe
|
|
)
|
|
echo.
|
|
pause
|
|
endlocal & exit /b %EXITCODE%
|