diff --git a/deploy/worker-windows/install-gui.ps1 b/deploy/worker-windows/install-gui.ps1 index 3369f1f..08cdece 100644 --- a/deploy/worker-windows/install-gui.ps1 +++ b/deploy/worker-windows/install-gui.ps1 @@ -26,6 +26,17 @@ $form.MaximizeBox = $false $form.BackColor = [System.Drawing.Color]::FromArgb(248, 250, 252) $form.Font = New-Object System.Drawing.Font("Segoe UI", 9) +# Fenster-Icon: Rippy-Disc zur Laufzeit zeichnen (Indigo-Kreis + weisses Loch) +# - kein externes .ico noetig. Erscheint in Titelleiste und Taskleiste. +try { + $ibmp = New-Object System.Drawing.Bitmap 32, 32 + $ig = [System.Drawing.Graphics]::FromImage($ibmp) + $ig.SmoothingMode = "AntiAlias" + $ig.FillEllipse((New-Object System.Drawing.SolidBrush ([System.Drawing.Color]::FromArgb(79, 70, 229))), 1, 1, 30, 30) + $ig.FillEllipse([System.Drawing.Brushes]::White, 12, 12, 8, 8) + $form.Icon = [System.Drawing.Icon]::FromHandle($ibmp.GetHicon()) +} catch {} + $titel = New-Object System.Windows.Forms.Label $titel.Text = "Rippy Encoding-Worker einrichten" $titel.Font = New-Object System.Drawing.Font("Segoe UI", 14, [System.Drawing.FontStyle]::Bold) diff --git a/docker/ui/src/components/WorkerVerwaltung.tsx b/docker/ui/src/components/WorkerVerwaltung.tsx index 87da6d5..d1c9e27 100644 --- a/docker/ui/src/components/WorkerVerwaltung.tsx +++ b/docker/ui/src/components/WorkerVerwaltung.tsx @@ -91,28 +91,28 @@ export default function WorkerVerwaltung() { }) } - // Grafischer Installer: erzeugt eine .bat CLIENT-seitig mit der eingetragenen - // LAN-IP (der Browser kennt sie, die API nicht sicher). Doppelklick lädt den - // WinForms-Installer von Rippy und startet ihn — kein CLI mehr. + // Grafischer Installer: erzeugt eine .vbs CLIENT-seitig mit der eingetragenen + // LAN-IP (der Browser kennt sie, die API nicht sicher). Doppelklick startet + // via wscript PowerShell KOMPLETT VERSTECKT (kein Konsolenfenster) und lädt + // den WinForms-Installer von Rippy — nur das Installer-Fenster erscheint. const guiInstallerHerunterladen = () => { const host = rippyHost.trim() if (!host) { toast('error', 'Erst die LAN-IP der Rippy-Maschine eintragen'); return } - const psInner = `try { Invoke-WebRequest 'http://${host}/api/worker-setup/windows-gui' -OutFile ($env:TEMP + '\\rippy-gui.ps1') -UseBasicParsing; & ($env:TEMP + '\\rippy-gui.ps1') -RippyHost '${host}' } catch { Write-Host $_.Exception.Message -ForegroundColor Red; Read-Host 'Fehler - Enter zum Schliessen' }` - const bat = [ - '@echo off', - 'title Rippy Worker Setup', - 'echo.', - `echo Starte grafischen Rippy-Worker-Installer von ${host} ...`, - 'echo.', - `powershell -NoProfile -ExecutionPolicy Bypass -STA -Command "${psInner}"`, + const ps = `try { Invoke-WebRequest 'http://${host}/api/worker-setup/windows-gui' -OutFile ($env:TEMP + '\\rippy-gui.ps1') -UseBasicParsing; & ($env:TEMP + '\\rippy-gui.ps1') -RippyHost '${host}' } catch { Add-Type -AssemblyName System.Windows.Forms; [void][System.Windows.Forms.MessageBox]::Show($_.Exception.Message, 'Rippy Installer') }` + // VBScript verdoppelt innere Anführungszeichen; Fensterstil 0 = versteckt + const psEscaped = ps.replace(/"/g, '""') + const vbs = [ + "' Rippy Encoding-Worker - grafische Installation (ohne Konsolenfenster)", + 'Set sh = CreateObject("WScript.Shell")', + `sh.Run "powershell -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -STA -Command ""${psEscaped}""", 0, False`, ].join('\r\n') - const blob = new Blob([bat], { type: 'application/octet-stream' }) + const blob = new Blob([vbs], { type: 'application/octet-stream' }) const a = document.createElement('a') a.href = URL.createObjectURL(blob) - a.download = 'rippy-worker-setup.bat' + a.download = 'rippy-worker-setup.vbs' document.body.appendChild(a); a.click(); a.remove() URL.revokeObjectURL(a.href) - toast('success', 'rippy-worker-setup.bat heruntergeladen — doppelklicken zum Installieren') + toast('success', 'rippy-worker-setup.vbs heruntergeladen — doppelklicken zum Installieren') } return ( @@ -232,11 +232,12 @@ export default function WorkerVerwaltung() { Fenster ausfüllen, „Installieren". Braucht nur Python 3.10+ auf dem PC — kein Docker, kein git.
- Windows warnt beim Doppelklick evtl. („Windows hat Ihren PC geschützt") → „Weitere Informationen" - → „Trotzdem ausführen". Die .bat lädt den Installer nur von deiner Rippy-Maschine. + Öffnet direkt das Installer-Fenster — kein Konsolenfenster. Windows warnt beim Doppelklick evtl. + („Windows hat Ihren PC geschützt") → „Weitere Informationen" → „Trotzdem ausführen". Die Datei + lädt den Installer nur von deiner Rippy-Maschine.
)}