MSI-Installer

Ein Windows-Installer-Paket, das den SQL Server Health Monitor bereitstellt und als Windows-Dienst registriert. Erstellt mit WiX v5; die Quellen liegen in installer/ (Package.wxs und build.ps1).

Das MSI bauen

Voraussetzungen auf dem Buildrechner:

  • .NET-9-SDK
  • WiX-v5-Kommandozeile: dotnet tool install --global wix
  • WiX-UI-Erweiterung (für den Installationsassistenten): wix extension add -g WixToolset.UI.wixext
cd installer
./build.ps1                                  # -> installer/SqlServerHealthMonitor-1.0.0.0.msi
./build.ps1 -Version 1.2.0.0 -Manufacturer "Contoso Ltd"
./build.ps1 -SelfContained                   # .NET-Laufzeit mitliefern (größeres MSI, keine Laufzeit-Voraussetzung)

build.ps1 führt dotnet publish aus (win-x64, standardmäßig laufzeitabhängig) und legt das Ergebnis in installer/publish ab, danach läuft wix build. Der Standardbuild setzt die ASP.NET Core 9 Runtime auf dem Zielrechner voraus; mit -SelfContained wird sie mitgeliefert.

Erhöhen Sie -Version bei jeder Auslieferung. Der UpgradeCode in Package.wxs ist fest und darf sich nie ändern — er ist es, der ein neueres MSI eine ältere Installation an Ort und Stelle aktualisieren lässt.

Was installiert wird

  • Dateien nach C:\Program Files\SQL Server Health Monitor\.
  • Ein Windows-Dienst SqlServerHealthMonitor („SQL Server Health Monitor“), Starttyp Automatisch, ausgeführt als LocalSystem.
  • Der Dienst wird während der Installation nicht gestartet — eine frische Installation hat noch keine Verbindungszeichenfolge und würde an der Startprüfung für den Produktivbetrieb scheitern. Erst konfigurieren, dann starten.

Konfiguration bei der Installation (Port und Verbindungszeichenfolge)

Interaktive Installation: Ein Doppelklick auf das MSI startet den Assistenten (Willkommen → Lizenz → Installationsordner → Dienstkonfiguration → Bestätigen → Fertigstellen). Die Seite Dienstkonfiguration enthält Felder für den HTTPS-Port und die Verbindungszeichenfolge zur Datenbank. Ersetzen Sie installer/license.rtf vor der Auslieferung durch Ihre eigenen Lizenzbedingungen.

Unbeaufsichtigte Installation: Dieselben zwei Einstellungen lassen sich als MSI-Eigenschaften übergeben. Der Installer schreibt sie als Maschinen-Umgebungsvariablen, die ASP.NET Core zusätzlich zu appsettings.json liest — Sie müssen also keine Datei bearbeiten:

Eigenschaft Setzt Umgebungsvariable Standard
HTTPSPORT SecuritySettings__HttpsPort 8443
SQLCONNECTIONSTRING ConnectionStrings__DefaultConnection (nicht gesetzt — vor dem Start des Dienstes erforderlich)
msiexec /i SqlServerHealthMonitor-1.0.1.0.msi `
    HTTPSPORT=9443 `
    SQLCONNECTIONSTRING="Server=db;Database=SQLSpa;User Id=svc;Password=…;TrustServerCertificate=true" `
    /qn /norestart

Die Variable für die Verbindungszeichenfolge wird nur angelegt, wenn Sie einen nicht leeren Wert übergeben; beide werden bei der Deinstallation wieder entfernt. Sicherheitshinweis: Eine Maschinen-Umgebungsvariable ist für lokale Administratoren und Prozesse lesbar — für ein SQL-Kennwort ist ein Domänen-Dienstkonto mit integrierter Sicherheit (kein Kennwort in der Zeichenfolge) dem Übergeben von SQLCONNECTIONSTRING vorzuziehen.

Erstkonfiguration

# 1. Verbindung zur Überwachungsdatenbank einrichten (entweder die Konfiguration bearbeiten ...)
notepad "C:\Program Files\SQL Server Health Monitor\appsettings.json"
#    ... und ConnectionStrings:DefaultConnection setzen

#    ... oder als Maschinen-Umgebungsvariable übergeben (bevorzugt — keine Geheimnisse auf der Platte):
[Environment]::SetEnvironmentVariable("ConnectionStrings__DefaultConnection",
    "Server=db;Database=SQLSpa;User Id=svc;Password=…;TrustServerCertificate=true", "Machine")

# 2. (Empfohlen) den Dienst unter einem Domänenkonto mit integrierter Sicherheit ausführen:
sc.exe config "SqlServerHealthMonitor" obj= "DOMAIN\monitor-svc" password= "…"

# 3. Starten
sc.exe start "SqlServerHealthMonitor"

Standardmäßig lauscht der Dienst auf https://localhost:8443 (beim ersten Start wird ein selbstsigniertes Zertifikat erzeugt — wie Sie es ersetzen, steht in deployment.md). Das erste Administratorkonto wird beim Erststart angelegt und die Zugangsdaten in INITIAL_ADMIN_PASSWORD.txt im Installationsordner hinterlegt; siehe deployment.md → Initial admin account.

Unbeaufsichtigt installieren und deinstallieren

msiexec /i SqlServerHealthMonitor-1.0.0.0.msi /qn /norestart
msiexec /x SqlServerHealthMonitor-1.0.0.0.msi /qn          # Deinstallation

Aktualisierungen

Führen Sie ein MSI mit höherer Version aus; die Major-Upgrade-Logik hält den Dienst an, ersetzt die Dateien und registriert den Dienst neu. appsettings.json bleibt erhalten (als „nie überschreiben“ gekennzeichnet), die Verbindungszeichenfolge des Betreibers übersteht die Aktualisierung also. Starten Sie den Dienst danach wieder von Hand — Aktualisierungen starten ihn nicht automatisch.

Was bei der Deinstallation nicht entfernt wird

  • Die DataProtection-Schlüssel (standardmäßig unter %LOCALAPPDATA%\SqlServerHealthMonitor\… des Dienstkontos) — der Schlüsselbund des Frameworks für Anmelde-Cookies und das selbstsignierte Zertifikat. Sie zu behalten erspart Ihren Benutzern lediglich eine erneute Anmeldung.
  • Die Überwachungsdatenbank — sie liegt außerhalb.
  • Änderungen des Betreibers an appsettings.json können zurückbleiben. Löschen Sie den Installationsordner von Hand, wenn Sie einen sauberen Stand wollen.