fix(worker-windows): Autostart brach die ganze Installation ab
Ampel / ampel (push) Successful in 28s
Ampel / ampel (push) Successful in 28s
Beim Commander live aufgetreten: Der Installer meldete
"FEHLER: FEHLER: Zugriff verweigert" samt dem Tipp, die IP koenne falsch sein -
und das, NACHDEM Worker-Code, Abhaengigkeiten und HandBrake schon fertig waren.
Die IP war also nie das Problem.
URSACHE: schtasks /create mit /tn "RippyWorker" legt die Aufgabe im
WURZELORDNER der Aufgabenplanung an, und das verlangt Administratorrechte. Der
Installer laeuft normal ohne. schtasks schrieb "FEHLER: Zugriff verweigert."
nach stderr, und weil im Skript $ErrorActionPreference = "Stop" steht, machte
PowerShell daraus einen TERMINIERENDEN Fehler - der catch-Block riss damit die
komplette Installation ab, obwohl nur der Autostart fehlte. Das doppelte
"FEHLER: FEHLER:" war der Hinweis: der aeussere Handler setzt sein Praefix vor
eine Meldung, die selbst schon mit "FEHLER:" begann, also aus schtasks kam.
FIX, zwei Teile:
1. Autostart ueber den Autostart-ORDNER statt schtasks. Eine Verknuepfung in
[Environment]::GetFolderPath("Startup") braucht NIE Adminrechte - und der
Nutzer kann sie dort selbst sehen und loeschen. Auf diesem Windows-PC
gegengeprueft: Verknuepfung angelegt (1047 Bytes) mit Admin=False.
2. Ein Fehlschlag beim Autostart ist jetzt eine WARNUNG in eigenem try/catch,
kein Abbruch. Der Worker ist zu dem Zeitpunkt fertig und startbar, und der
Text sagt das auch - plus den Handweg (shell:startup).
In BEIDEN Installern (install-gui.ps1 und install.ps1, dort mit -Autostart) -
der CLI-Weg hatte denselben Fehler. uninstall.ps1 raeumt jetzt die
Verknuepfung weg UND versucht weiter schtasks /delete, damit aeltere
Installationen sauber verschwinden.
RippyWorkerSetup.exe neu gebaut (50688 -> 52736 Bytes): die GUI ist in der .exe
eingebettet, ohne Rebuild wirkt der Fix beim Nutzer nicht.
Nebenbei: build-exe.ps1 hatte zwei Gedankenstriche. Ausgelieferte .ps1 muessen
reines ASCII sein (PowerShell 5.1 liest sie als ANSI) - jetzt sind alle drei
Skripte ASCII-rein und parsen fehlerfrei.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
@@ -1,7 +1,7 @@
|
|||||||
# Baut rippy.ico + RippyWorkerSetup.exe aus install-gui.ps1 (ps2exe).
|
# Baut rippy.ico + RippyWorkerSetup.exe aus install-gui.ps1 (ps2exe).
|
||||||
#
|
#
|
||||||
# WANN NEU BAUEN: nur wenn sich install-gui.ps1 (die Installer-Oberflaeche)
|
# WANN NEU BAUEN: nur wenn sich install-gui.ps1 (die Installer-Oberflaeche)
|
||||||
# aendert. NICHT bei MakeMKV-/HandBrake-Updates — die .exe holt HandBrake zur
|
# aendert. NICHT bei MakeMKV-/HandBrake-Updates - die .exe holt HandBrake zur
|
||||||
# Laufzeit (GitHub latest) und den Worker-Code live von Rippy, friert also
|
# Laufzeit (GitHub latest) und den Worker-Code live von Rippy, friert also
|
||||||
# keine Versionen ein.
|
# keine Versionen ein.
|
||||||
# AUSFUEHREN AUF WINDOWS (eine Windows-.exe kann nicht von Linux gebaut werden):
|
# AUSFUEHREN AUF WINDOWS (eine Windows-.exe kann nicht von Linux gebaut werden):
|
||||||
@@ -35,7 +35,7 @@ $bw.Write($png); $bw.Flush()
|
|||||||
[System.IO.File]::WriteAllBytes("$PSScriptRoot\rippy.ico", $icoStream.ToArray())
|
[System.IO.File]::WriteAllBytes("$PSScriptRoot\rippy.ico", $icoStream.ToArray())
|
||||||
Write-Host "rippy.ico erzeugt ($($png.Length) Bytes PNG)"
|
Write-Host "rippy.ico erzeugt ($($png.Length) Bytes PNG)"
|
||||||
|
|
||||||
# 2. ps2exe sicherstellen — TLS 1.2 ist der Fix fuer den NuGet-Bootstrap-Fehler
|
# 2. ps2exe sicherstellen - TLS 1.2 ist der Fix fuer den NuGet-Bootstrap-Fehler
|
||||||
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor 3072
|
[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor 3072
|
||||||
if (-not (Get-Module -ListAvailable ps2exe)) {
|
if (-not (Get-Module -ListAvailable ps2exe)) {
|
||||||
Write-Host "Bootstrappe NuGet + PSGallery ..."
|
Write-Host "Bootstrappe NuGet + PSGallery ..."
|
||||||
|
|||||||
@@ -199,6 +199,9 @@ if (-not `$Force) { if ([System.Windows.Forms.MessageBox]::Show("Rippy-Worker '$
|
|||||||
Add-Type -AssemblyName System.Windows.Forms
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
Get-CimInstance Win32_Process | Where-Object { `$_.ExecutablePath -like "`$PSScriptRoot*" } | ForEach-Object { Stop-Process -Id `$_.ProcessId -Force -ErrorAction SilentlyContinue }
|
Get-CimInstance Win32_Process | Where-Object { `$_.ExecutablePath -like "`$PSScriptRoot*" } | ForEach-Object { Stop-Process -Id `$_.ProcessId -Force -ErrorAction SilentlyContinue }
|
||||||
Start-Sleep 2
|
Start-Sleep 2
|
||||||
|
# Autostart-Verknuepfung entfernen (neuer Weg) ...
|
||||||
|
try { Remove-Item -Force (Join-Path ([Environment]::GetFolderPath("Startup")) "RippyWorker.lnk") -ErrorAction Stop } catch {}
|
||||||
|
# ... und die geplante Aufgabe aus aelteren Installationen, falls vorhanden.
|
||||||
schtasks /delete /tn "RippyWorker" /f 2>`$null | Out-Null
|
schtasks /delete /tn "RippyWorker" /f 2>`$null | Out-Null
|
||||||
try { Invoke-RestMethod -Method Delete "http://$rHost/api/workers/$wName" -TimeoutSec 5 | Out-Null } catch {}
|
try { Invoke-RestMethod -Method Delete "http://$rHost/api/workers/$wName" -TimeoutSec 5 | Out-Null } catch {}
|
||||||
Set-Location (Split-Path `$PSScriptRoot -Parent)
|
Set-Location (Split-Path `$PSScriptRoot -Parent)
|
||||||
@@ -207,10 +210,38 @@ Remove-Item -Recurse -Force `$PSScriptRoot
|
|||||||
"@
|
"@
|
||||||
Set-Content -Path "uninstall.ps1" -Value $uninstall -Encoding ASCII
|
Set-Content -Path "uninstall.ps1" -Value $uninstall -Encoding ASCII
|
||||||
|
|
||||||
# 6. Autostart
|
# 6. Autostart ueber den Autostart-ORDNER, nicht ueber schtasks.
|
||||||
|
#
|
||||||
|
# Befund 25.07.2026 (auf dem Commander-PC aufgetreten): schtasks /create
|
||||||
|
# mit /tn "RippyWorker" legt die Aufgabe im WURZELORDNER der
|
||||||
|
# Aufgabenplanung an, und das verlangt Administratorrechte. Der
|
||||||
|
# Installer laeuft normal ohne. schtasks schrieb deshalb
|
||||||
|
# "FEHLER: Zugriff verweigert." nach stderr, und weil oben
|
||||||
|
# $ErrorActionPreference = "Stop" steht, wurde daraus ein Abbruch der
|
||||||
|
# GESAMTEN Installation - obwohl alles ausser dem Autostart fertig war.
|
||||||
|
# Der Nutzer sah nur "FEHLER: FEHLER: Zugriff verweigert" samt dem
|
||||||
|
# irrefuehrenden Tipp, die IP koenne falsch sein.
|
||||||
|
#
|
||||||
|
# Der Autostart-Ordner braucht NIE Adminrechte, und der Nutzer kann die
|
||||||
|
# Verknuepfung dort selbst sehen und loeschen. Zwei Fliegen.
|
||||||
if ($chkAuto.Checked) {
|
if ($chkAuto.Checked) {
|
||||||
schtasks /create /f /tn "RippyWorker" /tr "`"$InstallDir\start-tray.bat`"" /sc onlogon | Out-Null
|
try {
|
||||||
Log "Autostart eingerichtet (Start bei Anmeldung)."
|
$autostartOrdner = [Environment]::GetFolderPath("Startup")
|
||||||
|
$verknuepfung = Join-Path $autostartOrdner "RippyWorker.lnk"
|
||||||
|
$wsh = New-Object -ComObject WScript.Shell
|
||||||
|
$lnk = $wsh.CreateShortcut($verknuepfung)
|
||||||
|
$lnk.TargetPath = (Join-Path $InstallDir "start-tray.bat")
|
||||||
|
$lnk.WorkingDirectory = $InstallDir
|
||||||
|
$lnk.Description = "Rippy Encoding-Worker"
|
||||||
|
$lnk.Save()
|
||||||
|
Log "Autostart eingerichtet (startet bei der Anmeldung)."
|
||||||
|
} catch {
|
||||||
|
# Nur eine Warnung: der Worker selbst ist fertig und startbar.
|
||||||
|
Log "HINWEIS: Autostart konnte nicht eingerichtet werden ($($_.Exception.Message))."
|
||||||
|
Log " Der Worker ist trotzdem fertig installiert und laeuft."
|
||||||
|
Log " Von Hand: start-tray.bat in den Autostart-Ordner verknuepfen"
|
||||||
|
Log " (Windows-Taste + R, dann shell:startup eingeben)."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Log ""
|
Log ""
|
||||||
|
|||||||
@@ -132,6 +132,9 @@ Get-CimInstance Win32_Process | Where-Object {
|
|||||||
`$_.ExecutablePath -like "`$PSScriptRoot*"
|
`$_.ExecutablePath -like "`$PSScriptRoot*"
|
||||||
} | ForEach-Object { Stop-Process -Id `$_.ProcessId -Force -ErrorAction SilentlyContinue }
|
} | ForEach-Object { Stop-Process -Id `$_.ProcessId -Force -ErrorAction SilentlyContinue }
|
||||||
Start-Sleep 2
|
Start-Sleep 2
|
||||||
|
# Autostart-Verknuepfung entfernen (neuer Weg) ...
|
||||||
|
try { Remove-Item -Force (Join-Path ([Environment]::GetFolderPath("Startup")) "RippyWorker.lnk") -ErrorAction Stop } catch {}
|
||||||
|
# ... und die geplante Aufgabe aus aelteren Installationen, falls vorhanden.
|
||||||
schtasks /delete /tn "RippyWorker" /f 2>`$null | Out-Null
|
schtasks /delete /tn "RippyWorker" /f 2>`$null | Out-Null
|
||||||
try {
|
try {
|
||||||
Invoke-RestMethod -Method Delete "http://$RippyHost/api/workers/$WorkerName" -TimeoutSec 5 | Out-Null
|
Invoke-RestMethod -Method Delete "http://$RippyHost/api/workers/$WorkerName" -TimeoutSec 5 | Out-Null
|
||||||
@@ -145,9 +148,28 @@ Set-Content -Path "uninstall.ps1" -Value $uninstall -Encoding ASCII
|
|||||||
Write-Host "uninstall.ps1 erzeugt."
|
Write-Host "uninstall.ps1 erzeugt."
|
||||||
|
|
||||||
# 8. Optional: Autostart bei Anmeldung (mit Tray)
|
# 8. Optional: Autostart bei Anmeldung (mit Tray)
|
||||||
|
#
|
||||||
|
# Ueber den Autostart-ORDNER, nicht ueber schtasks: Eine Aufgabe im
|
||||||
|
# Wurzelordner der Aufgabenplanung anzulegen verlangt Administratorrechte, und
|
||||||
|
# der Installer laeuft normal ohne. Auf dem Commander-PC scheiterte das am
|
||||||
|
# 25.07.2026 mit "FEHLER: Zugriff verweigert." - und weil oben
|
||||||
|
# $ErrorActionPreference = "Stop" steht, riss es die ganze Installation mit,
|
||||||
|
# obwohl nur der Autostart fehlte. Der Autostart-Ordner braucht nie Adminrechte.
|
||||||
if ($Autostart) {
|
if ($Autostart) {
|
||||||
schtasks /create /f /tn "RippyWorker" /tr "`"$ziel\start-tray.bat`"" /sc onlogon | Out-Null
|
try {
|
||||||
Write-Host "Autostart-Aufgabe 'RippyWorker' registriert (Tray bei Anmeldung)."
|
$autostartOrdner = [Environment]::GetFolderPath("Startup")
|
||||||
|
$wsh = New-Object -ComObject WScript.Shell
|
||||||
|
$lnk = $wsh.CreateShortcut((Join-Path $autostartOrdner "RippyWorker.lnk"))
|
||||||
|
$lnk.TargetPath = (Join-Path $ziel "start-tray.bat")
|
||||||
|
$lnk.WorkingDirectory = $ziel
|
||||||
|
$lnk.Description = "Rippy Encoding-Worker"
|
||||||
|
$lnk.Save()
|
||||||
|
Write-Host "Autostart eingerichtet (Verknuepfung im Autostart-Ordner)."
|
||||||
|
} catch {
|
||||||
|
Write-Host "HINWEIS: Autostart konnte nicht eingerichtet werden ($($_.Exception.Message))." -ForegroundColor Yellow
|
||||||
|
Write-Host " Der Worker ist trotzdem fertig installiert." -ForegroundColor Yellow
|
||||||
|
Write-Host " Von Hand: start-tray.bat in shell:startup verknuepfen." -ForegroundColor Yellow
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
|
|||||||
Reference in New Issue
Block a user