Windows-Tray-Anwendung (CLMgr-Anbindung an SwyxIt!) samt WebSocket-Zugang, Firefox-Erweiterung und Browser-Beispielclient.
68 lines
2.6 KiB
PowerShell
68 lines
2.6 KiB
PowerShell
# Startet SwyxTray in der Desktop-Sitzung des angemeldeten Benutzers.
|
|
#
|
|
# Hintergrund: Laeuft VS Code remote (SSH, Tunnel), startet dessen Debugger
|
|
# Prozesse in der Sitzung des VS-Code-Servers - meist Sitzung 0, und dort gibt
|
|
# es keine Taskleiste, also auch kein Tray-Symbol. Eine geplante Aufgabe ohne
|
|
# /RU laeuft dagegen mit dem interaktiven Token des Benutzers und landet damit
|
|
# auf dem Desktop. Braucht keine Administratorrechte.
|
|
#
|
|
# Wird von der Aufgabe "SwyxTray im Desktop starten (Debug)" aufgerufen; die
|
|
# Einzelinstanz-Sperre und der Build sind dann schon erledigt (dependsOn).
|
|
#
|
|
# Bewusst KEIN $ErrorActionPreference = 'Stop': Die Aufgabe leitet stderr um,
|
|
# und in Windows PowerShell 5.1 wird dann jede stderr-Zeile eines nativen
|
|
# Programms zu einem ErrorRecord - mit 'Stop' bricht das Skript an der Stelle
|
|
# mit einer irrefuehrenden Meldung ab. Stattdessen wird nach jedem
|
|
# schtasks-Aufruf $LASTEXITCODE geprueft.
|
|
param(
|
|
[Parameter(Mandatory = $true)][string]$Exe
|
|
)
|
|
|
|
$taskName = 'SwyxTray.F5'
|
|
|
|
if (-not (Test-Path $Exe)) {
|
|
Write-Host "FEHLER: Nicht gefunden: $Exe - erst bauen."
|
|
exit 1
|
|
}
|
|
|
|
# Ein soeben beendeter Prozess ist in Get-Process noch kurz als Leiche
|
|
# sichtbar. Damit die Warteschleife nicht darauf hereinfaellt, zaehlt nur ein
|
|
# PID, der vorher nicht da war.
|
|
$before = @(Get-Process SwyxTray -ErrorAction SilentlyContinue | ForEach-Object Id)
|
|
|
|
# /ST ist bei /SC ONCE Pflicht, der Zeitpunkt ist aber ohne Belang:
|
|
# gestartet wird sofort per /Run, danach wird die Aufgabe wieder entfernt.
|
|
$created = schtasks /Create /F /TN $taskName /TR "`"$Exe`" --verbose" /SC ONCE /ST 23:59 2>&1
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host "FEHLER: Geplante Aufgabe konnte nicht angelegt werden: $created"
|
|
exit 1
|
|
}
|
|
|
|
$run = schtasks /Run /TN $taskName 2>&1
|
|
if ($LASTEXITCODE -ne 0) {
|
|
schtasks /Delete /F /TN $taskName 2>&1 | Out-Null
|
|
Write-Host "FEHLER: Geplante Aufgabe konnte nicht gestartet werden: $run"
|
|
exit 1
|
|
}
|
|
|
|
# Die Aufgabe darf erst weg, wenn sie die EXE gestartet hat - /Run ist
|
|
# asynchron, ein zu fruehes /Delete wuerde den Start abwuergen.
|
|
$process = $null
|
|
foreach ($i in 1..60) {
|
|
$process = Get-Process SwyxTray -ErrorAction SilentlyContinue |
|
|
Where-Object { $before -notcontains $_.Id -and -not $_.HasExited } |
|
|
Select-Object -First 1
|
|
if ($process) { break }
|
|
Start-Sleep -Milliseconds 250
|
|
}
|
|
|
|
schtasks /Delete /F /TN $taskName 2>&1 | Out-Null
|
|
|
|
if (-not $process) {
|
|
Write-Host "FEHLER: SwyxTray ist nicht gestartet - Protokoll unter %LOCALAPPDATA%\SwyxTray pruefen."
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "SwyxTray laeuft (PID $($process.Id), Sitzung $($process.SessionId))."
|
|
exit 0
|