# Beendet alle laufenden Prozesse dieses Projekts (Electron, Node/Vite, und # einen verwaisten lokalen Input-Helper-Kindprozess), bevor eine neue Instanz # startet. # # Warum das noetig ist: Ein normales Schliessen der App (X-Button) raeumt # sauber auf (main.ts: app.on("will-quit") beendet den gespawnten # input-helper.ps1-Kindprozess). Wird die App aber gewaltsam beendet - z.B. # ueber Task-Manager "Task beenden" oder ein Skript, das Stop-Process -Force # auf den Electron-Prozess anwendet - greift dieser Cleanup-Handler NICHT, # und der Kindprozess (PowerShell mit dem Input-Helper) bleibt als Waise # aktiv, obwohl das Hauptfenster laengst weg ist. Dieses Skript faengt genau # das ab: es wird vor JEDEM Start (npm run dev und npm run dev:admin, ueber # den "predev"-Hook) ausgefuehrt und raeumt vorherige Instanzen kompromisslos # weg, egal wie sie beendet wurden. $ErrorActionPreference = "Stop" $project = (Resolve-Path -LiteralPath (Join-Path $PSScriptRoot "..")).Path $electronPath = Join-Path $project "node_modules\electron\dist\electron.exe" $killed = 0 Get-CimInstance Win32_Process | Where-Object { ($_.Name -eq "electron.exe" -and $_.ExecutablePath -eq $electronPath) -or ($_.Name -eq "node.exe" -and $_.CommandLine -like "*$project*") -or ($_.Name -eq "powershell.exe" -and $_.CommandLine -like "*input-helper.ps1*") } | ForEach-Object { Write-Host "Beende alte Instanz: $($_.Name) (PID $($_.ProcessId))" Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue $killed++ } if ($killed -gt 0) { # Windows braucht einen Moment, um Ports/Handles wirklich freizugeben. Start-Sleep -Milliseconds 500 Write-Host "$killed alte Prozess(e) beendet." } else { Write-Host "Keine alten Instanzen gefunden." }