Single-instance launcher + tolerant build pipeline
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>
This commit is contained in:
@@ -55,8 +55,9 @@
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Après chaque `dotnet publish -c Release`, copie le single-file exe à la racine du repo
|
||||
(C:\ASTERION\GIT\PS_Launcher\PSLauncher.exe) pour avoir un binaire prêt à tester
|
||||
sans aller chercher dans bin\Release\... -->
|
||||
(C:\ASTERION\GIT\PS_Launcher\PSLauncher.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>
|
||||
@@ -65,7 +66,8 @@
|
||||
<Copy SourceFiles="$(PublishDir)$(AssemblyName).exe"
|
||||
DestinationFolder="$(RepoRoot)"
|
||||
SkipUnchangedFiles="false"
|
||||
OverwriteReadOnlyFiles="true" />
|
||||
OverwriteReadOnlyFiles="true"
|
||||
ContinueOnError="WarnAndContinue" />
|
||||
<Message Importance="high" Text="Copied $(AssemblyName).exe to $(RepoRoot)" />
|
||||
</Target>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user