summaryrefslogtreecommitdiffstats
path: root/packaging
diff options
context:
space:
mode:
Diffstat (limited to 'packaging')
-rw-r--r--packaging/win/service-mode.ps123
1 files changed, 22 insertions, 1 deletions
diff --git a/packaging/win/service-mode.ps1 b/packaging/win/service-mode.ps1
index e522f04..2cb61b4 100644
--- a/packaging/win/service-mode.ps1
+++ b/packaging/win/service-mode.ps1
@@ -19,7 +19,7 @@
one place: %TEMP%\meshbay-firewall.log.
.PARAMETER Action
- install service.ps1 install, then firewall.ps1 add
+ install service.ps1 install, then firewall.ps1 add, then service.ps1 run
remove service.ps1 remove, then firewall.ps1 remove
#>
[CmdletBinding()]
@@ -51,5 +51,26 @@ catch {
$failed = $true
}
+# Register-ScheduledTask with -Trigger AtStartup does exactly that -- it does
+# not launch the task now. Every caller of this script (the installer's own
+# "background service" choice, and the Node page's later toggle) expects the
+# node to actually be running by the time the one UAC prompt they were shown
+# returns; without this, nothing is listening until the next reboot, with no
+# error and no indication that anything is still needed. `run` needs no
+# further elevation (Task Scheduler grants the owning user that much once the
+# task exists) -- doing it here, inside the same elevated pass, is only about
+# timing: the daemon comes up before this script's own exit code reaches the
+# caller, not because starting it needs the admin token this script is
+# holding. A no-op, harmlessly, if the task is already running (2026-09-14).
+if ($Action -eq "install" -and -not $failed) {
+ try {
+ & (Join-Path $here "service.ps1") "run"
+ }
+ catch {
+ " service run failed: $_" | Add-Content $log
+ $failed = $true
+ }
+}
+
if ($failed) { exit 1 }
exit 0