From 8a6b4796cd1443a40b91553967c356421abf658a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Mon, 21 Sep 2026 18:43:39 +0200 Subject: [PATCH] [Windows] Make process detection rely on an explicit PowerShell exit code --- cmake/NSIS.template.in | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/cmake/NSIS.template.in b/cmake/NSIS.template.in index f3f172693..8631e72f6 100644 --- a/cmake/NSIS.template.in +++ b/cmake/NSIS.template.in @@ -225,12 +225,17 @@ FunctionEnd ; as accepted by Get-Process -Name), call this, result in $R0 ; (1 = running from $INSTDIR, 0 = not running) Function IsAppRunning - nsExec::ExecToLog 'powershell -NoProfile -Command "Get-Process -Name $\'$R2$\' -ErrorAction SilentlyContinue | Where-Object { $$_.Path -like $\'$INSTDIR\*$\' } | Select-Object -First 1"' + ; Exit the process explicitly so nsExec's pop reflects whether a matching + ; process was found: powershell.exe exits 0 whether or not the pipeline + ; produced objects. Any other result (exit 1, or nsExec's "error" string + ; when powershell itself cannot be started) is treated as "running" so the + ; lock guard fails closed. + nsExec::ExecToLog 'powershell -NoProfile -Command "if (Get-Process -Name $\'$R2$\' -ErrorAction SilentlyContinue | Where-Object { $$_.Path -like $\'$INSTDIR\*$\' } | Select-Object -First 1) { exit 1 } else { exit 0 }"' Pop $R0 - ${If} $R0 = 0 - StrCpy $R0 1 - ${Else} + ${If} $R0 == "0" StrCpy $R0 0 + ${Else} + StrCpy $R0 1 ${EndIf} FunctionEnd