Repository-Wartung WindowsServicify -- 2026-04-06
Ueberblick
Wartungsanalyse gegen die Architektur-Vorlage dotnet-windows-service. Build: 0 Warnungen, 0 Fehler. Tests: 218 bestanden (192 Unit, 26 Integration). Coverage: 88.7% Line / 86.1% Branch (Unit), 77.1% Line / 56.9% Branch (Integration).
1. Architektur-Compliance: Soll vs. Ist
| Aspekt |
Soll (dotnet-windows-service) |
Ist (WindowsServicify) |
Status |
| Solution-Struktur |
ConsoleApp + Domain + Domain.Tests + Domain.IntegrationTests |
ConsoleApp + Domain + Domain.Tests + Domain.IntegrationTests |
Erfuellt |
| Dual-Mode Entry Point |
Environment.UserInteractive Pruefung, CLI vs. Service-Host |
Vorhanden in Program.cs, vollstaendig implementiert |
Erfuellt |
| BackgroundService |
WindowsBackgroundService : BackgroundService mit Monitoring-Loop |
Vorhanden, 5s Polling, Restart bei Crash, IProcessExitHandler |
Erfuellt |
| Service Installation |
Factory Pattern mit PowerShell + sc.exe, IWindowsServiceInstallHelper |
Vorhanden, beide Strategien implementiert |
Erfuellt |
| Health Check |
Optional, HttpListener-basiert, GET /health, 200/503 |
Vorhanden, konfigurierbar via HealthCheckPort |
Erfuellt |
| Logging |
ProcessLogger mit Rotation (7 Tage), thread-safe, IDisposable |
Vorhanden, alle Merkmale implementiert |
Erfuellt |
| Result Pattern |
Result T fuer alle fehlerbehafteten Operationen |
Vorhanden, konsequent eingesetzt (R00027 abgeschlossen) |
Erfuellt |
| Configuration Model |
Record mit HealthCheckPort, camelCase JSON, Validation |
Vorhanden, inkl. ServiceConfigurationValidator |
Erfuellt |
| Input Validation |
GeneratedRegex, Injection-Pruefung, Path-Traversal |
Vorhanden, inkl. Arguments + WorkingDirectory (R00024) |
Erfuellt |
| Graceful Shutdown |
CloseMainWindow -> WaitForExit(timeout) -> Kill(true) |
Vorhanden, konfigurierbarer Timeout (R00018) |
Erfuellt |
| IProcessExitHandler |
Abstraktion fuer Environment.Exit, testbar |
Vorhanden, DefaultProcessExitHandler + TestProcessExitHandler |
Erfuellt |
| Exit Codes |
Main gibt int zurueck, 0=Erfolg, 1=Fehler |
Vorhanden (R00028 abgeschlossen) |
Erfuellt |
| Target Framework |
.NET 10.0 |
net10.0 in allen Projekten |
Erfuellt |
| Nullable Reference Types |
enable in allen Projekten |
enable in allen Projekten |
Erfuellt |
| ImplicitUsings |
enable in allen Projekten |
enable in allen Projekten |
Erfuellt |
| Records fuer DTOs |
ServiceConfiguration, ConsoleCommandLineParameters, CommandDefinition |
Alle drei als record implementiert |
Erfuellt |
| InternalsVisibleTo |
Domain -> Tests + IntegrationTests |
Vorhanden in Domain.csproj |
Erfuellt |
| TreatWarningsAsErrors |
In allen Projekten |
Directory.Build.props mit TreatWarningsAsErrors=true |
Erfuellt |
| NUnit 4.x + coverlet |
NUnit 4.5.x, NUnit3TestAdapter 6.2.x, coverlet 8.0.x |
NUnit 4.5.1, NUnit3TestAdapter 6.2.0, coverlet 8.0.1 |
Erfuellt |
| CI: Build + Test + Coverage |
Push -> Build + Test + Coverage-Artefakt |
Vorhanden in build.yml |
Erfuellt |
| CI: Semver + Release |
workflow_dispatch mit patch/minor/major, Tag, GitHub Release |
Vorhanden mit prepare + build-and-release Jobs |
Erfuellt |
| CI: NuGet-Caching |
actions/cache fuer ~/.nuget/packages |
Vorhanden |
Erfuellt |
| Dependabot |
nuget + github-actions, woechentlich |
Vorhanden in dependabot.yml |
Erfuellt |
| app.manifest (UAC) |
requireAdministrator oder asInvoker |
Nicht vorhanden |
Fehlend |
| CodeQL SAST |
codeql.yml Workflow, security-extended Queries |
Nicht vorhanden |
Fehlend |
| File-scoped Namespaces |
namespace X; ueberall |
ServiceConfigurationRequester nutzt Block-Form |
Abweichung |
Compliance-Rate: 25/28 Aspekte erfuellt (89%)
2. Aenderungen seit letzter Wartung (R00022, 06.04.2026 morgens)
Die vorherige Wartungsanalyse identifizierte 14 Vorschlaege. Seitdem wurden 12 davon als Anforderungen umgesetzt:
| Vorschlag |
Anforderung |
Status |
| CLAUDE.md aktualisieren |
(direkt umgesetzt) |
Erledigt |
| TreatWarningsAsErrors |
R00023 |
Abgeschlossen |
| Arguments/WorkingDirectory-Validierung |
R00024 |
Abgeschlossen |
| CI-Release-Workflow |
R00025 |
Abgeschlossen |
| Integration-Tests |
R00026 |
Abgeschlossen |
| Result-Pattern konsequent |
R00027 |
Abgeschlossen |
| Exit-Codes |
R00028 |
Abgeschlossen |
| NuGet-Caching CI |
R00029 |
Abgeschlossen |
| Coverage-Report CI |
R00030 |
Abgeschlossen |
| Health-Check Endpoint |
R00031 |
Erledigt |
| Documentation bereinigen |
R00032 |
Abgeschlossen |
| README modernisieren |
R00033 |
Abgeschlossen |
| PR/Issue-Templates |
-- |
Offen |
| R00009-R00019 Status aktualisieren |
-- |
Offen |
Erheblicher Fortschritt: 12 von 14 Vorschlaegen umgesetzt. Testanzahl von 130 auf 218 gestiegen. Coverage von 71.7% auf 88.7% (Line).
3. Aktuelle Staerken
- Vollstaendige Architektur-Compliance bis auf 3 kleinere Luecken (89%)
- 218 Tests (192 Unit + 26 Integration), alle gruen
- 88.7% Line Coverage auf Domain-Code (Unit-Tests allein)
- 0 Warnungen bei TreatWarningsAsErrors
- Health-Check-Endpoint als Differenzierungsmerkmal implementiert
- Moderner CI/CD-Workflow mit Semver, Release, Coverage-Artefakte
- Defense-in-Depth-Sicherheit: Validator, Sanitierung, kein Shell-Execute
4. Verbesserungsvorschlaege
Prioritaet Hoch
4.1 CodeQL SAST-Workflow einrichten
Kategorie: Sicherheit / CI/CD
Aufwand: Klein
Die Architektur-Vorlage fordert einen CodeQL-Workflow fuer automatisierte Sicherheitsanalyse. Dieser fehlt komplett.
Umsetzung: .github/workflows/codeql.yml erstellen mit:
- Trigger: push/PR auf main + woechentlicher Cron
- Languages: csharp
- Queries: security-extended
4.2 app.manifest fuer UAC-Elevation erstellen
Kategorie: Architektur-Compliance
Aufwand: Klein
Die Vorlage fordert ein app.manifest mit requireAdministrator (oder bewusst asInvoker). --install und --uninstall erfordern Admin-Rechte, aber es gibt keinen Manifest-Eintrag, der UAC-Elevation anfordert. Ohne Manifest scheitern diese Befehle still, wenn nicht als Admin ausgefuehrt.
Umsetzung:
- WindowsServicify.ConsoleApp/app.manifest erstellen mit requireAdministrator
- ApplicationManifest-Property in ConsoleApp.csproj ergaenzen
4.3 Anforderungsstatus R00009-R00019 aktualisieren
Kategorie: Dokumentation
Aufwand: Klein
Die Anforderungen R00009 bis R00019 zeigen status: Offen, obwohl sie laengst implementiert sind. Auch R00001 (erste Wartung) und R00022 (diese Wartung) sollten als abgeschlossen markiert werden.
Prioritaet Mittel
4.4 ServiceConfigurationRequester: Block-Form Namespace korrigieren
Kategorie: Code-Konsistenz
Aufwand: Klein
ServiceConfigurationRequester.cs nutzt als einzige Datei noch die Block-Form des Namespace statt der projektweit verwendeten file-scoped Form.
4.5 Roslyn Analyzer / StyleCop integrieren
Kategorie: Entwickler-Erfahrung
Aufwand: Mittel
Kein statischer Analyse-Tooling jenseits des Compilers konfiguriert. Ein Roslyn Analyzer (z.B. Microsoft.CodeAnalysis.NetAnalyzers oder StyleCop.Analyzers) wuerde Code-Style-Konsistenz automatisiert durchsetzen.
Umsetzung: Package-Reference in Directory.Build.props ergaenzen.
4.6 Combined Coverage messen
Kategorie: Test-Qualitaet
Aufwand: Klein
Unit-Tests und Integration-Tests messen Coverage separat. Die tatsaechliche Gesamtcoverage (Vereinigung beider Laeufe) wird nicht berechnet. Tools wie reportgenerator koennen mehrere Coverage-Files mergen.
Umsetzung: Im CI-Workflow nach den Tests reportgenerator ausfuehren, um einen kombinierten Coverage-Report zu erzeugen.
Prioritaet Niedrig
4.7 PR- und Issue-Templates erstellen
Kategorie: Entwickler-Erfahrung
Aufwand: Klein
Keine Templates fuer Pull Requests oder Issues vorhanden. Templates verbessern die Konsistenz externer Beitraege.
4.8 Uptime-Format im Health-Check erweitern
Kategorie: Feature
Aufwand: Klein
HealthCheckService.FormatUptime() nutzt hh:mm:ss, was bei Laufzeiten ueber 24 Stunden nicht korrekt anzeigt (nur Stunden 0-23). Fuer einen Windows-Service, der wochen- oder monatelang laeuft, sollte das Format Tage enthalten (z.B. 3d 05:30:20).
4.9 Linting-Konsistenz pruefen
Kategorie: Code-Qualitaet
Aufwand: Klein
Einige Dateien haben inkonsistente Einrueckung (Tabs vs. Spaces in .csproj-Dateien, z.B. ConsoleApp.csproj mischt Tab- und Space-Einrueckung in ItemGroup). Die .editorconfig deckt dies ab, aber bestehende Dateien wurden nicht reformatiert.
5. Uebersichtstabelle
| Nr |
Vorschlag |
Kategorie |
Prioritaet |
Aufwand |
| 4.1 |
CodeQL SAST-Workflow |
Sicherheit/CI |
Hoch |
Klein |
| 4.2 |
app.manifest (UAC) |
Architektur |
Hoch |
Klein |
| 4.3 |
Anforderungsstatus R00009-R00019 |
Dokumentation |
Hoch |
Klein |
| 4.4 |
File-scoped Namespace korrigieren |
Code-Konsistenz |
Mittel |
Klein |
| 4.5 |
Roslyn Analyzer integrieren |
Entwickler-Erfahrung |
Mittel |
Mittel |
| 4.6 |
Combined Coverage messen |
Test-Qualitaet |
Mittel |
Klein |
| 4.7 |
PR/Issue-Templates |
Entwickler-Erfahrung |
Niedrig |
Klein |
| 4.8 |
Uptime-Format erweitern |
Feature |
Niedrig |
Klein |
| 4.9 |
Linting-Konsistenz |
Code-Qualitaet |
Niedrig |
Klein |
6. Gesamtbewertung
Technischer Zustand: A- (sehr gut)
Das Projekt hat seit der letzten Wartung (R00022 morgens) einen enormen Sprung gemacht. 12 Anforderungen wurden umgesetzt, die Architektur-Compliance liegt bei 89%, und die wichtigste strategische Empfehlung (Health-Check als Differenzierungsmerkmal) wurde implementiert.
Die verbleibenden 3 Architektur-Abweichungen (CodeQL, app.manifest, file-scoped Namespace) sind alle mit geringem Aufwand behebbar. Die groessten Verbesserungspotenziale liegen jetzt im Bereich Sicherheits-Tooling (CodeQL) und Developer Experience (Roslyn Analyzer).
Empfehlung: Quick Wins 4.1-4.3 sofort umsetzen (zusammen ca. 30 Minuten), dann 4.4-4.6 als naechste Iteration.
Repository-Wartung WindowsServicify -- 2026-04-06
Ueberblick
Wartungsanalyse gegen die Architektur-Vorlage
dotnet-windows-service. Build: 0 Warnungen, 0 Fehler. Tests: 218 bestanden (192 Unit, 26 Integration). Coverage: 88.7% Line / 86.1% Branch (Unit), 77.1% Line / 56.9% Branch (Integration).1. Architektur-Compliance: Soll vs. Ist
Compliance-Rate: 25/28 Aspekte erfuellt (89%)
2. Aenderungen seit letzter Wartung (R00022, 06.04.2026 morgens)
Die vorherige Wartungsanalyse identifizierte 14 Vorschlaege. Seitdem wurden 12 davon als Anforderungen umgesetzt:
Erheblicher Fortschritt: 12 von 14 Vorschlaegen umgesetzt. Testanzahl von 130 auf 218 gestiegen. Coverage von 71.7% auf 88.7% (Line).
3. Aktuelle Staerken
4. Verbesserungsvorschlaege
Prioritaet Hoch
4.1 CodeQL SAST-Workflow einrichten
Kategorie: Sicherheit / CI/CD
Aufwand: Klein
Die Architektur-Vorlage fordert einen CodeQL-Workflow fuer automatisierte Sicherheitsanalyse. Dieser fehlt komplett.
Umsetzung:
.github/workflows/codeql.ymlerstellen mit:4.2 app.manifest fuer UAC-Elevation erstellen
Kategorie: Architektur-Compliance
Aufwand: Klein
Die Vorlage fordert ein app.manifest mit requireAdministrator (oder bewusst asInvoker). --install und --uninstall erfordern Admin-Rechte, aber es gibt keinen Manifest-Eintrag, der UAC-Elevation anfordert. Ohne Manifest scheitern diese Befehle still, wenn nicht als Admin ausgefuehrt.
Umsetzung:
4.3 Anforderungsstatus R00009-R00019 aktualisieren
Kategorie: Dokumentation
Aufwand: Klein
Die Anforderungen R00009 bis R00019 zeigen status: Offen, obwohl sie laengst implementiert sind. Auch R00001 (erste Wartung) und R00022 (diese Wartung) sollten als abgeschlossen markiert werden.
Prioritaet Mittel
4.4 ServiceConfigurationRequester: Block-Form Namespace korrigieren
Kategorie: Code-Konsistenz
Aufwand: Klein
ServiceConfigurationRequester.cs nutzt als einzige Datei noch die Block-Form des Namespace statt der projektweit verwendeten file-scoped Form.
4.5 Roslyn Analyzer / StyleCop integrieren
Kategorie: Entwickler-Erfahrung
Aufwand: Mittel
Kein statischer Analyse-Tooling jenseits des Compilers konfiguriert. Ein Roslyn Analyzer (z.B. Microsoft.CodeAnalysis.NetAnalyzers oder StyleCop.Analyzers) wuerde Code-Style-Konsistenz automatisiert durchsetzen.
Umsetzung: Package-Reference in Directory.Build.props ergaenzen.
4.6 Combined Coverage messen
Kategorie: Test-Qualitaet
Aufwand: Klein
Unit-Tests und Integration-Tests messen Coverage separat. Die tatsaechliche Gesamtcoverage (Vereinigung beider Laeufe) wird nicht berechnet. Tools wie reportgenerator koennen mehrere Coverage-Files mergen.
Umsetzung: Im CI-Workflow nach den Tests reportgenerator ausfuehren, um einen kombinierten Coverage-Report zu erzeugen.
Prioritaet Niedrig
4.7 PR- und Issue-Templates erstellen
Kategorie: Entwickler-Erfahrung
Aufwand: Klein
Keine Templates fuer Pull Requests oder Issues vorhanden. Templates verbessern die Konsistenz externer Beitraege.
4.8 Uptime-Format im Health-Check erweitern
Kategorie: Feature
Aufwand: Klein
HealthCheckService.FormatUptime() nutzt hh:mm:ss, was bei Laufzeiten ueber 24 Stunden nicht korrekt anzeigt (nur Stunden 0-23). Fuer einen Windows-Service, der wochen- oder monatelang laeuft, sollte das Format Tage enthalten (z.B. 3d 05:30:20).
4.9 Linting-Konsistenz pruefen
Kategorie: Code-Qualitaet
Aufwand: Klein
Einige Dateien haben inkonsistente Einrueckung (Tabs vs. Spaces in .csproj-Dateien, z.B. ConsoleApp.csproj mischt Tab- und Space-Einrueckung in ItemGroup). Die .editorconfig deckt dies ab, aber bestehende Dateien wurden nicht reformatiert.
5. Uebersichtstabelle
6. Gesamtbewertung
Technischer Zustand: A- (sehr gut)
Das Projekt hat seit der letzten Wartung (R00022 morgens) einen enormen Sprung gemacht. 12 Anforderungen wurden umgesetzt, die Architektur-Compliance liegt bei 89%, und die wichtigste strategische Empfehlung (Health-Check als Differenzierungsmerkmal) wurde implementiert.
Die verbleibenden 3 Architektur-Abweichungen (CodeQL, app.manifest, file-scoped Namespace) sind alle mit geringem Aufwand behebbar. Die groessten Verbesserungspotenziale liegen jetzt im Bereich Sicherheits-Tooling (CodeQL) und Developer Experience (Roslyn Analyzer).
Empfehlung: Quick Wins 4.1-4.3 sofort umsetzen (zusammen ca. 30 Minuten), dann 4.4-4.6 als naechste Iteration.