diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-10-15 17:42:30 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-10-15 17:45:41 +0200 |
| commit | 0d082ab4d19412079516b281aff76e8c3f70d9ba (patch) | |
| tree | 46bc48f67663c4049384578c594b8558bce2db6c /packages/meshbay-client/build/stop-node.ps1 | |
| parent | 41d03f0a35a95daa7d54e7f29ab924776bedf6e4 (diff) | |
| download | meshbay-0d082ab4d19412079516b281aff76e8c3f70d9ba.tar.gz | |
fix(packaging): setup ends a command-line client run from its install
A `meshbay-cli chat --follow` left open holds node-runtime's DLLs, so the
previous version's uninstaller failed ("Failed to uninstall old application
files"), a silent update included, and left the node it had stopped not
running. stop-node.ps1 now ends a meshbay-cli.exe run from this install
(-InstallDir, setup's $INSTDIR), and no other copy.
Found through CIM, not Get-Process: setup runs the 32-bit PowerShell, which
reads no path for a 64-bit process, and the first version of the stop matched
nothing. The test runs the script in that PowerShell. Checked live: an update
over a running follower now ends it, replaces every file and restarts the node.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-client/build/stop-node.ps1')
| -rw-r--r-- | packages/meshbay-client/build/stop-node.ps1 | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/packages/meshbay-client/build/stop-node.ps1 b/packages/meshbay-client/build/stop-node.ps1 index cfaf2f8..dcb0ea6 100644 --- a/packages/meshbay-client/build/stop-node.ps1 +++ b/packages/meshbay-client/build/stop-node.ps1 @@ -10,9 +10,34 @@ # 2. Task Scheduler for a background-service node (the owner may end the task; # taskkill from here gets "Access is denied" in its session). # 3. taskkill for anything left in this session. -# Exit 0 once no meshbay-node.exe is left, 1 otherwise. +# +# Before all that, the command-line client (-InstallDir, setup's $INSTDIR): it +# runs from the same node-runtime folder and holds its Python DLLs, so one left +# open -- a `chat --follow`, a `stream` -- made the previous version's +# uninstaller fail ("Failed to uninstall old application files"), silent +# updates included. It is ended like the app is; only copies of this install. +# Exit 0 once neither is left, 1 otherwise. +param([string]$InstallDir = "") $ErrorActionPreference = "SilentlyContinue" +if ($InstallDir) { + $runtime = Join-Path $InstallDir "resources\node-runtime\" + # Through CIM, not Get-Process: setup runs the 32-bit PowerShell ($SYSDIR is + # SysWOW64 there), which reads no path for a 64-bit process -- the filter + # matched nothing and the update failed as before. + function CliLeft { + @(Get-CimInstance Win32_Process -Filter "Name='meshbay-cli.exe'" ` + -ErrorAction SilentlyContinue | Where-Object { + $_.ExecutablePath -and + $_.ExecutablePath.StartsWith($runtime, [StringComparison]::OrdinalIgnoreCase) + }) + } + CliLeft | ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue } + $deadline = (Get-Date).AddSeconds(10) + while ((CliLeft).Count -and (Get-Date) -lt $deadline) { Start-Sleep -Milliseconds 250 } + if ((CliLeft).Count) { exit 1 } +} + function NodeLeft { [bool](Get-Process -Name meshbay-node -ErrorAction SilentlyContinue) } function WaitGone([int]$Seconds) { $deadline = (Get-Date).AddSeconds($Seconds) |