118 lines
6.0 KiB
PowerShell
118 lines
6.0 KiB
PowerShell
param(
|
|
[string]$ProjectRoot,
|
|
[string]$OcrWorkers = ""
|
|
)
|
|
|
|
# Mit -NoExit gestartet: dieses Fenster bleibt immer offen (siehe dev-admin.cmd),
|
|
# aber ein sauberer try/catch mit klarer Meldung ist trotzdem besser als ein
|
|
# roher Stacktrace, wenn z.B. der Dev-Port schon belegt ist.
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
try {
|
|
$project = (Resolve-Path -LiteralPath $ProjectRoot).Path
|
|
$logDir = Join-Path $project "outputs\admin-start"
|
|
New-Item -ItemType Directory -Force -Path $logDir | Out-Null
|
|
$logPath = Join-Path $logDir "admin-dev.log"
|
|
try {
|
|
Start-Transcript -Path $logPath -Append | Out-Null
|
|
} catch {
|
|
Write-Host "WARNUNG: Admin-Start-Log konnte nicht geschrieben werden: $($_.Exception.Message)" -ForegroundColor Yellow
|
|
}
|
|
|
|
Write-Host "Projekt: $project"
|
|
Write-Host "Admin-Log: $logPath"
|
|
if ($OcrWorkers) {
|
|
$env:GAA_OCR_WORKERS = $OcrWorkers
|
|
Write-Host "GAA_OCR_WORKERS: $env:GAA_OCR_WORKERS"
|
|
}
|
|
|
|
# A UAC-elevated process gets its environment rebuilt fresh from the
|
|
# registry; it does NOT inherit PATH edits that only exist in the calling
|
|
# (non-elevated) shell session (e.g. a version manager that only patched
|
|
# the current terminal). If node/npm resolve normally but not here, that
|
|
# is almost always the cause - fail with a clear message instead of a
|
|
# cryptic "npm is not recognized" a few lines down.
|
|
$npmCommand = Get-Command npm.cmd -ErrorAction SilentlyContinue
|
|
if (-not $npmCommand) { $npmCommand = Get-Command npm -ErrorAction SilentlyContinue }
|
|
$nodeCommand = Get-Command node.exe -ErrorAction SilentlyContinue
|
|
if (-not $nodeCommand) { $nodeCommand = Get-Command node -ErrorAction SilentlyContinue }
|
|
if (-not $npmCommand -or -not $nodeCommand) {
|
|
Write-Host ""
|
|
Write-Host "FEHLER: npm/node wurden in diesem administrativen Fenster nicht gefunden." -ForegroundColor Red
|
|
Write-Host "npm gefunden: $([bool]$npmCommand) node gefunden: $([bool]$nodeCommand)" -ForegroundColor Red
|
|
Write-Host "Ein 'Als Administrator ausfuehren'-Prozess bekommt seine Umgebung frisch aus der Registry -" -ForegroundColor Red
|
|
Write-Host "PATH-Aenderungen, die nur in deiner normalen (nicht-elevierten) Sitzung gelten (z.B. nvm/Volta" -ForegroundColor Red
|
|
Write-Host "ohne dauerhafte Registry-Eintragung), sind hier nicht sichtbar, obwohl 'npm run dev' normal funktioniert." -ForegroundColor Red
|
|
Write-Host "PATH in diesem Fenster:" -ForegroundColor DarkGray
|
|
Write-Host $env:PATH -ForegroundColor DarkGray
|
|
Write-Host ""
|
|
Write-Host "Loesung: node/npm dauerhaft im PATH eintragen (System-Umgebungsvariablen, nicht nur die Sitzung)," -ForegroundColor Yellow
|
|
Write-Host "z.B. ueber die Windows-Systemsteuerung 'Umgebungsvariablen bearbeiten' oder 'setx PATH ...'." -ForegroundColor Yellow
|
|
throw "npm/node nicht im administrativen PATH gefunden."
|
|
}
|
|
|
|
# Kill stale instances of THIS project BEFORE checking the port: a leftover
|
|
# electron/vite/node/input-helper cluster from a previous run (e.g. a window
|
|
# force-closed via Task Manager, which skips main.ts's graceful will-quit
|
|
# cleanup and orphans the spawned input-helper.ps1 child) is the most common
|
|
# reason a fresh start silently talks to an old instance instead of
|
|
# replacing it. Shared with "npm run dev" itself via the predev hook, so
|
|
# both start paths get the same guarantee.
|
|
& (Join-Path $PSScriptRoot "kill-stale-instances.ps1")
|
|
|
|
$devPort = 5173
|
|
$devControlPort = 17317
|
|
$devControlInUse = $null
|
|
try {
|
|
$devControlInUse = Get-NetTCPConnection -LocalPort $devControlPort -State Listen -ErrorAction Stop | Select-Object -First 1
|
|
} catch {
|
|
# Get-NetTCPConnection kann auf manchen Systemen fehlen; das ist kein Fehler.
|
|
$devControlInUse = $null
|
|
}
|
|
if ($devControlInUse) {
|
|
$portOwner = Get-Process -Id $devControlInUse.OwningProcess -ErrorAction SilentlyContinue
|
|
Write-Host ""
|
|
Write-Host "FEHLER: Dev-Control-Port $devControlPort ist noch belegt (Prozess: $($portOwner.ProcessName), PID $($devControlInUse.OwningProcess))." -ForegroundColor Red
|
|
Write-Host "Das wuerde Live-Tests gegen eine alte App-Instanz laufen lassen. Schliesse die alte App oder beende diesen Prozess und starte npm run dev:admin erneut." -ForegroundColor Red
|
|
throw "Dev-Control-Port $devControlPort ist durch PID $($devControlInUse.OwningProcess) belegt."
|
|
}
|
|
|
|
$portInUse = $null
|
|
try {
|
|
$portInUse = Get-NetTCPConnection -LocalPort $devPort -State Listen -ErrorAction Stop | Select-Object -First 1
|
|
} catch {
|
|
# Get-NetTCPConnection kann auf manchen Systemen fehlen; das ist kein Fehler.
|
|
$portInUse = $null
|
|
}
|
|
if ($portInUse) {
|
|
$portOwner = Get-Process -Id $portInUse.OwningProcess -ErrorAction SilentlyContinue
|
|
Write-Host ""
|
|
Write-Host "WARNUNG: Port $devPort ist noch belegt (Prozess: $($portOwner.ProcessName), PID $($portInUse.OwningProcess)) - auch nach dem Beenden alter Instanzen dieses Projekts." -ForegroundColor Yellow
|
|
Write-Host "Das ist wahrscheinlich ein unabhaengiger Prozess (z.B. ein anderes Projekt auf Port $devPort)." -ForegroundColor Yellow
|
|
Write-Host "'npm run dev' weicht dann auf einen anderen Port aus oder verbindet sich mit dem falschen Server." -ForegroundColor Yellow
|
|
Write-Host "Falls noetig: Prozess PID $($portInUse.OwningProcess) manuell beenden und dieses Fenster neu starten." -ForegroundColor Yellow
|
|
Write-Host ""
|
|
}
|
|
|
|
Set-Location -LiteralPath $project
|
|
Write-Host "Starte npm run dev (Administrator)..."
|
|
npm run dev
|
|
$exitCode = $LASTEXITCODE
|
|
|
|
if ($exitCode -ne 0) {
|
|
Write-Host ""
|
|
Write-Host "npm run dev wurde mit Fehlercode $exitCode beendet." -ForegroundColor Red
|
|
Write-Host "Die Ausgabe oben zeigt die genaue Ursache (z.B. belegter Port, fehlende Abhaengigkeiten)." -ForegroundColor Red
|
|
} else {
|
|
Write-Host ""
|
|
Write-Host "npm run dev wurde beendet (Fenster schliessen oder Strg+C fuer Neustart)."
|
|
}
|
|
} catch {
|
|
Write-Host ""
|
|
Write-Host "Fehler beim Start: $($_.Exception.Message)" -ForegroundColor Red
|
|
Write-Host $_.ScriptStackTrace -ForegroundColor DarkGray
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Host "Dieses Fenster bleibt offen (siehe Meldungen oben). Schliessen mit Enter oder dem Fenster-X."
|