Repository navigation
v2.34.0 — Windows-Dienst-Installer und robuste DataProtection-Keys
Neu
- Windows-Dienst-Installer in
Minicon.SimpleAdmin.WebUI:SimpleAdminWebUIHost.RunAsync(args)erkennt die Subkommandosinstall/uninstall/start/stopam ersten Argument und delegiert anServiceInstaller.Dispatch. Legt in einem Rutsch den Windows-Dienst (sc.exe create binPath=<EigeneEXE>, Autostart), die URL-ACL (netsh http add urlacl), eine Firewall-Regel (netsh advfirewall) und den DataProtection-Keys-OrdnerC:\ProgramData\SimpleAdmin\dp-keysan und erteilt dem Dienstkonto pericaclsdortModify-Rechte(OI)(CI)M. Default-KontoLocalSystem; optional--account=DOMAIN\umit Passwort-Prompt. Flags:--port=5080,--service-name,--display-name,--description,--keys-dir=…,--non-interactive,--purge(nuruninstall, löscht den Keys-Ordner mit). - Betrieb ohne IIS: Im Windows-Dienst-Modus hostet die Anwendung über HttpSys statt Kestrel, damit Negotiate weiterhin ohne IIS funktioniert. Interaktive Starts (Konsole) und IIS-Deployments bleiben auf Kestrel bzw. In-Process — kein Eingriff ins bestehende IIS-Setup nötig.
install.cmdals Ein-Klick-Starter neben der Host-EXE.
Geändert
- Neuer Einzeiler-Einstieg für die Host-Anwendung:
return await SimpleAdminWebUIHost.RunAsync(args);(parallel zuSimpleAdminWorkerHost.RunAsync). Die bisherige drei-Zeilen-Variante (CreateBuilder→AddSimpleAdminWebUI→UseSimpleAdminWebUI→Run) funktioniert unverändert. - Alle Package-Versionen im Lockstep auf 2.34.0 gezogen.
Behoben
- DataProtection-Keys hingen am Benutzerprofil des AppPools / Dienstkontos. Nach AppPool-Recycle oder bei blockierter User-Profile-Load crashte die WebUI beim Start mit
CryptographicException 0xe0434352beim Entschlüsseln verwaister User-DPAPI-Keys.AddSimpleAdminWebUIpersistiert die Keys jetzt in einem festen Dateisystem-Pfad (DefaultC:\ProgramData\SimpleAdmin\dp-keys) und verschlüsselt sie mit DPAPI im LocalMachine-Scope (ProtectKeysWithDpapi(protectToLocalMachine: true)). Overrides:DataProtection:KeysDirectory(anderer Pfad) bzw.DataProtection:Enabled = false(zurück zum Framework-Default). Lässt sich das Verzeichnis nicht anlegen, fällt der Host auf das Default-Verhalten zurück und loggt einen Hinweis.
Intern
- Externe Prozessaufrufe des Installers (
sc.exe,netsh,icacls) laufen überIProcessRunner; Unit-Tests mocken diese Schicht und decken Argumentparsing, Install-Reihenfolge und Uninstall-Pfad ab. - Testlauf lokal: 544 bestanden, 2 übersprungen (PowerShell-Integrationstests auf macOS).
🤖 Generated with Claude Code