aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-client/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-client/src')
-rw-r--r--packages/meshbay-client/src/main.js22
1 files changed, 19 insertions, 3 deletions
diff --git a/packages/meshbay-client/src/main.js b/packages/meshbay-client/src/main.js
index bebe144..f201a21 100644
--- a/packages/meshbay-client/src/main.js
+++ b/packages/meshbay-client/src/main.js
@@ -1567,11 +1567,24 @@ function registerBridge() {
if (process.platform === 'win32') {
if (opts && opts.hubUrl && opts.username) provisionNode(opts.hubUrl, opts.username);
- await killNodeProcesses(); // clear a crash-looping one
const svc = await winServiceTaskStatus();
if (svc.installed) {
+ // A service-mode daemon runs under the task's own S4U logon session,
+ // not this (interactive) one -- killNodeProcesses()'s taskkill and
+ // CTRL_BREAK both target it by image name/pid from here, and both
+ // fail with "Access is denied" across that session boundary
+ // (confirmed live 2026-09-14: an already-elevated `schtasks /end`
+ // succeeds against the exact same pid taskkill just refused).
+ // Silently, too -- killNodeProcesses() never surfaces the failure,
+ // so a stuck instance was never actually replaced: re-running the
+ // task below is then a no-op too, since Windows still considers it
+ // Running (default "do not start a new instance" policy). Task Scheduler can
+ // stop what it started; go through it, the way nodeServiceStop/
+ // nodeServiceRestart already correctly do, instead of reaching past it.
+ await winServiceTaskEnd();
await winServiceTaskRun();
} else {
+ await killNodeProcesses(); // clear a crash-looping one (same session)
await spawnNodeDetached();
}
const p = await waitForNode(Date.now() + 60000);
@@ -1585,9 +1598,12 @@ function registerBridge() {
? p
: await linkNodeKeyAndAwaitRunning(opts, Date.now() + 45000);
if (!ready || ready.status !== 'running') {
+ // "Link Node" is on the Settings page, not this one -- pointing here
+ // at the Node page sent whoever read this hunting for a control that
+ // is not on it (reproduced live 2026-09-14).
throw new Error(
- 'the node started but could not link to your hub account. Open the '
- + 'Node page and use "Link this node", or check you are signed in to '
+ 'the node started but could not link to your hub account. Open '
+ + 'Settings and use "Link Node", or check you are signed in to '
+ 'the hub this node is configured for.');
}
return { started: true, ...ready };