|
1 |
| -!ifndef nsProcess::FindProcess |
2 |
| - !include "nsProcess.nsh" |
3 |
| -!endif |
4 |
| - |
5 | 1 | !ifmacrondef customCheckAppRunning
|
6 | 2 | !include "getProcessInfo.nsh"
|
7 | 3 | Var pid
|
|
37 | 33 | !endif
|
38 | 34 | !macroend
|
39 | 35 |
|
40 |
| -!macro FIND_PROCESS _FILE _ERR |
41 |
| - !ifdef INSTALL_MODE_PER_ALL_USERS |
42 |
| - ${nsProcess::FindProcess} "${_FILE}" ${_ERR} |
43 |
| - !else |
44 |
| - # find process owned by current user |
45 |
| - nsExec::Exec `"$SYSDIR\cmd.exe" /c tasklist /FI "USERNAME eq %USERNAME%" /FI "IMAGENAME eq ${_FILE}" /FO csv | "$SYSDIR\find.exe" "${_FILE}"` |
46 |
| - Pop ${_ERR} |
47 |
| - !endif |
| 36 | +!macro FIND_PROCESS _PATH _ERR |
| 37 | + nsExec::Exec `powershell -Command "if ((Get-Process | Where-Object {$$_.Path -and $$_.Path.StartsWith('${_PATH}')}).Count -gt 0) {exit 0} else {exit 1}"` |
| 38 | + Pop ${_ERR} |
48 | 39 | !macroend
|
49 | 40 |
|
50 | 41 | !macro _CHECK_APP_RUNNING
|
|
55 | 46 | Sleep 300
|
56 | 47 | ${endIf}
|
57 | 48 |
|
58 |
| - !insertmacro FIND_PROCESS "${APP_EXECUTABLE_FILENAME}" $R0 |
| 49 | + !insertmacro FIND_PROCESS "$INSTDIR" $R0 |
59 | 50 | ${if} $R0 == 0
|
60 | 51 | ${if} ${isUpdated}
|
61 | 52 | # allow app to exit without explicit kill
|
|
69 | 60 |
|
70 | 61 | DetailPrint `Closing running "${PRODUCT_NAME}"...`
|
71 | 62 |
|
72 |
| - # https://github.com/electron-userland/electron-builder/issues/2516#issuecomment-372009092 |
73 |
| - !ifdef INSTALL_MODE_PER_ALL_USERS |
74 |
| - nsExec::Exec `taskkill /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid"` |
75 |
| - !else |
76 |
| - nsExec::Exec `"$SYSDIR\cmd.exe" /c taskkill /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid" /fi "USERNAME eq %USERNAME%"` |
77 |
| - !endif |
| 63 | + nsExec::Exec `powershell -Command "Get-Process | ?{$$_.Path -and $$_.Path.StartsWith('$INSTDIR')} | Stop-Process -Force"` |
78 | 64 | # to ensure that files are not "in-use"
|
79 | 65 | Sleep 300
|
80 | 66 |
|
|
84 | 70 | loop:
|
85 | 71 | IntOp $R1 $R1 + 1
|
86 | 72 |
|
87 |
| - !insertmacro FIND_PROCESS "${APP_EXECUTABLE_FILENAME}" $R0 |
| 73 | + !insertmacro FIND_PROCESS "$INSTDIR" $R0 |
88 | 74 | ${if} $R0 == 0
|
89 | 75 | # wait to give a chance to exit gracefully
|
90 | 76 | Sleep 1000
|
91 |
| - !ifdef INSTALL_MODE_PER_ALL_USERS |
92 |
| - nsExec::Exec `taskkill /f /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid"` |
93 |
| - !else |
94 |
| - nsExec::Exec `"$SYSDIR\cmd.exe" /c taskkill /f /im "${APP_EXECUTABLE_FILENAME}" /fi "PID ne $pid" /fi "USERNAME eq %USERNAME%"` |
95 |
| - !endif |
96 |
| - !insertmacro FIND_PROCESS "${APP_EXECUTABLE_FILENAME}" $R0 |
| 77 | + nsExec::Exec `powershell -Command "Get-Process | ?{$$_.Path -and $$_.Path.StartsWith('$INSTDIR')} | Stop-Process -Force"` |
| 78 | + !insertmacro FIND_PROCESS "$INSTDIR" $R0 |
97 | 79 | ${If} $R0 == 0
|
98 | 80 | DetailPrint `Waiting for "${PRODUCT_NAME}" to close.`
|
99 | 81 | Sleep 2000
|
|
0 commit comments