fix windows build

This commit is contained in:
paisley
2026-03-04 15:29:31 +08:00
parent 89028756e1
commit 91fddb2cc8

View File

@@ -3,83 +3,65 @@
; Install: enables long paths, adds resources\cli to user PATH for openclaw CLI. ; Install: enables long paths, adds resources\cli to user PATH for openclaw CLI.
; Uninstall: removes the PATH entry and optionally deletes user data. ; Uninstall: removes the PATH entry and optionally deletes user data.
; When customCheckAppRunning is defined, electron-builder skips its conditional
; !include for getProcessInfo.nsh and the "Var pid" declaration. We must do
; both ourselves so ${GetProcessInfo} and $pid are available.
!ifndef getProcessInfo_included
!define getProcessInfo_included
!include "getProcessInfo.nsh"
Var pid
!endif
!ifndef nsProcess_included !ifndef nsProcess_included
!define nsProcess_included !define nsProcess_included
!include "nsProcess.nsh" !include "nsProcess.nsh"
!endif !endif
!macro customCheckAppRunning !macro customCheckAppRunning
${GetProcessInfo} 0 $pid $1 $2 $3 $4 ${nsProcess::FindProcess} "${APP_EXECUTABLE_FILENAME}" $R0
${if} $3 != "${APP_EXECUTABLE_FILENAME}"
${if} $R0 == 0
${if} ${isUpdated} ${if} ${isUpdated}
# allow app to exit without explicit kill # allow app to exit without explicit kill
Sleep 300 Sleep 1000
Goto doStopProcess
${endIf} ${endIf}
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(appRunning)" /SD IDOK IDOK doStopProcess
Quit
# Instead of launching cmd.exe /c tasklist, use the nsProcess plugin directly for all environments. doStopProcess:
# This prevents the brief black cmd window from flashing. DetailPrint `Closing running "${PRODUCT_NAME}"...`
${nsProcess::FindProcess} "${APP_EXECUTABLE_FILENAME}" $R0
${if} $R0 == 0 # Silently kill the process using nsProcess instead of taskkill / cmd.exe
${if} ${isUpdated} ${nsProcess::KillProcess} "${APP_EXECUTABLE_FILENAME}" $R0
# allow app to exit without explicit kill
# to ensure that files are not "in-use"
Sleep 300
# Retry counter
StrCpy $R1 0
loop:
IntOp $R1 $R1 + 1
${nsProcess::FindProcess} "${APP_EXECUTABLE_FILENAME}" $R0
${if} $R0 == 0
# wait to give a chance to exit gracefully
Sleep 1000 Sleep 1000
Goto doStopProcess ${nsProcess::KillProcess} "${APP_EXECUTABLE_FILENAME}" $R0
${endIf}
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "$(appRunning)" /SD IDOK IDOK doStopProcess
Quit
doStopProcess:
DetailPrint `Closing running "${PRODUCT_NAME}"...`
# Silently kill the process using nsProcess instead of taskkill / cmd.exe
${nsProcess::KillProcess} "${APP_EXECUTABLE_FILENAME}" $R0
# to ensure that files are not "in-use"
Sleep 300
# Retry counter
StrCpy $R1 0
loop:
IntOp $R1 $R1 + 1
${nsProcess::FindProcess} "${APP_EXECUTABLE_FILENAME}" $R0 ${nsProcess::FindProcess} "${APP_EXECUTABLE_FILENAME}" $R0
${if} $R0 == 0 ${If} $R0 == 0
# wait to give a chance to exit gracefully DetailPrint `Waiting for "${PRODUCT_NAME}" to close.`
Sleep 1000 Sleep 2000
${nsProcess::KillProcess} "${APP_EXECUTABLE_FILENAME}" $R0
${nsProcess::FindProcess} "${APP_EXECUTABLE_FILENAME}" $R0
${If} $R0 == 0
DetailPrint `Waiting for "${PRODUCT_NAME}" to close.`
Sleep 2000
${else}
Goto not_running
${endIf}
${else} ${else}
Goto not_running Goto not_running
${endIf} ${endIf}
${else}
Goto not_running
${endIf}
# App likely running with elevated permissions. # App likely running with elevated permissions.
# Ask user to close it manually # Ask user to close it manually
${if} $R1 > 1 ${if} $R1 > 1
MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(appCannotBeClosed)" /SD IDCANCEL IDRETRY loop MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(appCannotBeClosed)" /SD IDCANCEL IDRETRY loop
Quit Quit
${else} ${else}
Goto loop Goto loop
${endIf} ${endIf}
not_running: not_running:
nsProcess::Unload nsProcess::Unload
${endIf}
${endIf} ${endIf}
!macroend !macroend