mirror of
https://github.com/hansjone/netx.git
synced 2026-10-14 13:03:19 +08:00
Installer: dynamic light/dark Win11 style, new brand wizard images, auto language, exclusive run mode (tray / Windows service) plus autostart and auto-update on the Tasks page (pre-selected from what is installed on upgrades, untouched by silent updates), 5 localized Start Menu entries. Tray: theme-aware rounded menu with live status, icons and status-dot tray icon; health polled off the UI thread; Settings submenu toggles autostart and daily updates; browser opened de-elevated via explorer. Fixes: - tray Stop/Start was ignored in service mode (service_run restarted the children) - all start/stop now goes through runtime_ctl.ps1 - logon tray task and SYSTEM service task were killed after 72h (default ExecutionTimeLimit); autostart was registered for the elevating account and opened a browser on every logon - uninstall left the NetXTray/NetXUpdate tasks behind - silent auto-update killed the tray without restarting it - repair_venv.ps1 was never staged into the release - wildcard NETX_HOST (0.0.0.0) broke health checks - ICO frames were PNG, which System.Drawing decodes as noise; icons now use the current brand mark Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
64 lines
2.6 KiB
PowerShell
64 lines
2.6 KiB
PowerShell
param(
|
|
[string]$ProgramRoot = "",
|
|
[string]$DataRoot = "",
|
|
[ValidateSet("Daily", "AtLogOn", "Hourly")]
|
|
[string]$Trigger = "Daily",
|
|
[string]$At = "03:30",
|
|
[switch]$Remove = $false,
|
|
[switch]$EnableAutoEnv = $true
|
|
)
|
|
|
|
# Schedule silent update checks. With NETX_UPDATE_AUTO=true, applies updates when available.
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
. "$PSScriptRoot\_common.ps1"
|
|
Assert-NetxAdminOrRelaunch -ScriptPath $PSCommandPath -BoundParameters $PSBoundParameters -WindowStyle Normal
|
|
|
|
$prog = Get-NetxProgramRoot -Override $ProgramRoot
|
|
$data = Get-NetxDataRoot -ProgramRoot $prog -Override $DataRoot
|
|
$taskName = "NetXUpdate"
|
|
$taskPath = "\NetX\"
|
|
$checkPs1 = Join-Path $PSScriptRoot "check_update.ps1"
|
|
|
|
if ($Remove) {
|
|
Unregister-ScheduledTask -TaskName $taskName -TaskPath $taskPath -Confirm:$false -ErrorAction SilentlyContinue
|
|
# Tray also applies updates on launch when NETX_UPDATE_AUTO=true; turn that off too.
|
|
$envFile = Join-Path $data ".env"
|
|
if (Test-Path $envFile) {
|
|
Write-DotEnvValue -Path $envFile -Values @{ "NETX_UPDATE_AUTO" = "false" }
|
|
}
|
|
Write-Host "==> Update task removed"
|
|
exit 0
|
|
}
|
|
|
|
if ($EnableAutoEnv) {
|
|
$envFile = Join-Path $data ".env"
|
|
if (-not (Test-Path $data)) {
|
|
New-Item -ItemType Directory -Path $data -Force | Out-Null
|
|
}
|
|
Write-DotEnvValue -Path $envFile -Values @{ "NETX_UPDATE_AUTO" = "true" }
|
|
Write-Host "==> Set NETX_UPDATE_AUTO=true in $envFile"
|
|
}
|
|
|
|
$arg = "-NoProfile -ExecutionPolicy Bypass -File `"$checkPs1`" -ProgramRoot `"$prog`" -DataRoot `"$data`" -Apply -Quiet -AutoOnly"
|
|
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument $arg -WorkingDirectory $prog
|
|
|
|
switch ($Trigger) {
|
|
"Hourly" {
|
|
$trig = New-ScheduledTaskTrigger -Once -At (Get-Date).Date.AddHours((Get-Date).Hour + 1) `
|
|
-RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration ([TimeSpan]::MaxValue)
|
|
}
|
|
"AtLogOn" {
|
|
$trig = New-ScheduledTaskTrigger -AtLogOn
|
|
}
|
|
default {
|
|
$trig = New-ScheduledTaskTrigger -Daily -At $At
|
|
}
|
|
}
|
|
|
|
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -StartWhenAvailable
|
|
# Highest: silent apply must write Program Files / run Setup.
|
|
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Highest
|
|
Register-ScheduledTask -TaskName $taskName -TaskPath $taskPath -Action $action -Trigger $trig -Settings $settings -Principal $principal -Force | Out-Null
|
|
Write-Host "==> Scheduled update task: $taskPath$taskName ($Trigger, RunLevel Highest)" -ForegroundColor Green
|
|
Write-Host " Manual run: .\packaging\check_update.ps1 -Apply -Quiet -AutoOnly"
|