Dienst WKL Database Update (Referenz)
Der Dienst „WKL Database Update“ spielt signierte Datenbank-Update-Pakete ein, ohne dass der Datendienst läuft. Er nimmt denselben Ablauf wie das Update-Modul des Datendienstes: Pakete aus dem Eingangsordner einer Datenbank prüfen, sichern, einspielen, ankündigen und melden. Wer den Datendienst betreibt, braucht diesen Dienst nicht. Die Schritte zur Einrichtung beschreibt So spielen Sie Datenbank-Updates ohne Datendienst ein.
Syntax
msiexec /i Wkl.Data.Update-<Fassung>.msi [EIGENSCHAFT=Wert]… [/qn] Wkl.Data.Update.exe <Befehl> [<id>] [Argumente] [--json]
Die Befehle laufen auf dem Server in einer Eingabeaufforderung als Administrator.
Parameter
Installationspaket
Wkl.Data.Update-<Fassung>.msi installiert das Programm nach C:\Program Files\Wkl\Database Update
(eigenständig veröffentlicht, ohne .NET-Laufzeit auf dem Server, mit dem SQL-Server-Provider), richtet
den Windows-Dienst Wkl.Data.Update mit automatischem Start ein und startet ihn. Es ist vom
Installationsprogramm des Datendienstes getrennt.
| Eigenschaft | Vorgabe | Bedeutung |
|---|---|---|
UPD_SERVICE_ACCOUNT | NT SERVICE\Wkl.Data.Update | Konto des Dienstes: das virtuelle Konto oder ein gruppenverwaltetes Dienstkonto (DOMÄNE\name$). Ein Konto mit Kennwort bietet das Paket nicht an. Ein Update behält das Konto |
UPD_REMOVE_DATA | – | 1 beim Entfernen: auch %ProgramData%\WKL\Database Update mit Konfigurationen, Einstellungen und Meldungen löschen. Ohne sie bleibt der Ordner |
Bei der Installation legt das Programm (setup-host) die Ordner unten mit eigenen Rechten an und
registriert die Ereignisquelle WKL Database Update im Anwendungsprotokoll. Beim Entfernen nimmt es die
Ereignisquelle wieder weg.
Ordner
Die Ordner liegen fest unter %ProgramData%\WKL\Database Update. Keiner erbt die Rechte von
%ProgramData%.
| Ordner | Inhalt | Rechte |
|---|---|---|
databases | Die geschützte Konfiguration jeder Datenbank, <id>.json, und nichts sonst | Administratoren und SYSTEM ändern, das Dienstkonto liest |
settings | Die Betriebseinstellungen jeder Datenbank, <id>.json | Administratoren und SYSTEM ändern, das Dienstkonto ändert |
log | Die Meldungen des Meldewegs file, <JJJJ-MM-TT>.jsonl | Administratoren und SYSTEM ändern, das Dienstkonto ändert |
Geschützte Konfiguration
Eine Datei <id>.json in databases richtet eine Datenbank ein. Aufbau und Felder sind dieselben wie
beim Update-Modul, mit drei Unterschieden:
- Anmeldung. Ohne
connection.secretmeldet sich der Dienst mit seinem eigenen Windows-Konto an (Integrated Security=Trueinconnection.string); das Konto braucht in der Datenbank die Rechte, Struktur zu ändern und zu sichern. Mitconnection.secretmeldet er sich mit der SQL-Anmeldung ausconnection.stringan, das Kennwort kommt aus der Umgebungsvariablen oder Datei (env:NAME,file:PFAD). gatewayAliashat keine Wirkung: Anwendungen erreichen die Datenbank nicht über einen Datendienst. Offene Sitzungen älterer Anwendungen sieht der Dienst über die Datenbank selbst.mailnennt den Mailserver für den Meldewegemail:server,port(Vorgabe25),fromund optionalsecret(env:NAME,file:PFAD). Port465verbindet verschlüsselt ab dem ersten Byte, jeder andere Port verlangt STARTTLS; unverschlüsselt sendet der Dienst nie, und das Zertifikat des Mailservers muss gültig sein. Mitsecretmeldet er sich mit der Absenderadresse als Benutzername an, ohnesecretsendet er ohne Anmeldung, etwa über ein internes Relay. Das Update-Modul des Datendienstes nimmt stattdessen `Gateway:Mail`.
"mail": { "server": "smtp.example.com", "port": 587, "from": "updates@example.com", "secret": "file:C:\\ProgramData\\WKL\\Database Update\\mail.txt" }
Eine Datei, die andere als Administratoren und SYSTEM ändern können, ein Kennwort in
connection.string oder ein Dateiname, der nicht der id entspricht, lassen die Datenbank aus;
databases nennt die Datei und den Grund.
Betriebseinstellungen
Die Datei <id>.json in settings schreibt der Dienst über den Befehl settings. Fehlt ein Schlüssel
oder die Datei, gilt die Vorgabe. Eine Datei, die kein gültiges JSON ist oder einen Wert außerhalb des
Bereichs hat, ersetzt der Dienst nicht durch Vorgaben: Die Datenbank wartet, bis die Datei stimmt.
| Schlüssel | Vorgabe | Bedeutung |
|---|---|---|
expand | automatic | Abwärtsverträgliche Pakete: automatic sofort, confirm erst nach Bestätigung |
contract | confirm | Nicht abwärtsverträgliche Pakete: confirm erst nach Bestätigung, automatic angekündigt und zur Frist eingespielt |
noticeMinutes | 60 | Vorlauf einer Ankündigung in Minuten, 0 bis 10080, wenn das Paket keinen nennt |
sessionWindowMinutes | 15 | 1 bis 1440; ohne Wirkung, solange gatewayAlias keine Wirkung hat |
backup.keepCount | 10 | Sicherungen, die immer bleiben, 1 bis 1000 |
backup.keepDays | 30 | Alter in Tagen, ab dem eine ältere Sicherung gelöscht wird, 0 bis 3650; 0: nur die Anzahl zählt |
notify.channels | ["eventlog"] | Meldewege: eventlog, file, email |
notify.email.to | – | Empfänger, mit ; getrennt; nötig, wenn email eingeschaltet ist |
{
"expand": "automatic", "contract": "confirm", "noticeMinutes": 60, "sessionWindowMinutes": 15,
"backup": { "keepCount": 10, "keepDays": 30 },
"notify": { "channels": ["eventlog", "file"], "email": { "to": null } }
}
Die Aufbewahrung der Sicherungen arbeitet wie beim Update-Modul.
Mails des Meldewegs email gehen über den Mailserver aus mail der geschützten Konfiguration an
notify.email.to, abseits des Durchlaufs: Ein langsamer oder nicht erreichbarer Mailserver verzögert
die Mail, nie ein Paket. Fehlt mail, lässt sich secret nicht auflösen oder nimmt der Mailserver die
Mail nicht an, steht eine Warnung im Ereignisprotokoll; die Meldung selbst steht dort ohnehin.
Befehle
| Befehl | Bedeutung |
|---|---|
databases | Eingerichtete Datenbanken mit Konfiguration (Schlüssel als SHA-256, Geheimnis nur als Verweis) und Einstellungen; Dateien in databases, die der Dienst nicht beachtet, mit Grund |
status <id> | Offene Pakete (id, Datei, Schemafassung, Art, Status, Grund, Frist), blockierende Sitzungen und Abweichungen vom zuletzt eingespielten Modell |
history <id> [--skip n] [--take n] | Abgeschlossene Pakete, neueste zuerst, mit ihren Schritten; --take 1 bis 100, Vorgabe 20 |
confirm <id> <paket> | Wartendes Paket bestätigen: ein abwärtsverträgliches läuft sofort, ein nicht abwärtsverträgliches wird angekündigt und läuft zur Frist |
move-deadline <id> <paket> <zeitpunkt> | Frist eines angekündigten Pakets verschieben; Zeitpunkt nach ISO 8601, ohne Zone als UTC gelesen (2026-11-02T18:00Z) |
cancel-notice <id> <paket> | Ankündigung zurücknehmen; das Paket wartet wieder auf Bestätigung |
retry <id> <paket> | Fehlgeschlagenes oder abgelehntes Paket erneut nehmen, als neues Paket mit allen Prüfungen |
dismiss <id> <paket> | Fehlgeschlagenes oder abgelehntes Paket verwerfen; es verschwindet aus dem Stand |
upload <id> <datei> | Paket (höchstens 64 MB) in den Eingangsordner legen und sofort prüfen lassen |
settings <id> [Optionen] | Betriebseinstellungen zeigen oder ändern: --expand, --contract, --notice-minutes, --session-window-minutes, --keep-count, --keep-days, --channels eventlog,file,email, --email-to "a@example.com;b@example.com". Sie gelten ab dem nächsten Durchlauf |
help | Übersicht der Befehle |
<paket> ist die Spalte id aus status. --json gibt die Daten als JSON aus; status --json hat
dasselbe Format wie update-status des Datendienstes.
Rückgabewert. 0 erledigt; 1 Aufruf falsch, Datenbank oder Paket unbekannt, Paket in einem
anderen Status, Datenbank nicht erreichbar oder Dienst nicht erreichbar; 10 ein Durchlauf spielt
gerade ein Paket ein (gleich wieder versuchen); sonst der Code des Pakets, etwa 7 wartet auf
Bestätigung.
Meldungen
Im Anwendungsprotokoll unter der Quelle WKL Database Update stehen die Ereignisse der Pakete mit den
IDs 4101 bis 4106 (wie beim Update-Modul), dazu der Start des Dienstes
und jeder Verwaltungsbefehl mit dem Windows-Konto, das ihn aufgerufen hat. Der Meldeweg file schreibt
je Tag (UTC) log\<JJJJ-MM-TT>.jsonl; der Dienst löscht diese Dateien nie.
Bemerkungen
- Wer verwalten darf. Die Befehle reichen den Auftrag über die Named Pipe
\\.\pipe\Wkl.Data.Updatean den laufenden Dienst. Sie ist nur für Administratoren und SYSTEM offen und weist jede Verbindung aus dem Netzwerk ab; eine Verwaltung von einem anderen Rechner gibt es nicht. Ohne erhöhte Eingabeaufforderung lehnt Windows den Zugriff ab. - Wer handelt. Der Dienst führt jeden Befehl mit seinem eigenen Konto aus. Der Administrator braucht keine Rechte in der Datenbank. Bei einer Bestätigung trägt der Dienst das Windows-Konto des Aufrufers (
DOMÄNE\name) als Bestätigenden in die Datenbank ein. - Nur zum Dienst. Die Befehlszeile sendet nur, wenn am anderen Ende der Pipe der laufende Dienst
Wkl.Data.Updatesitzt. - Keine Überschneidung. Befehle und Durchläufe laufen nacheinander. Läuft gerade ein Paket, wartet ein Befehl bis zu zehn Sekunden und endet sonst mit
10. - Durchlauf. Alle 15 Sekunden; ohne Datei in
databasestut der Dienst nichts.
Beispiel
C:\> "C:\Program Files\Wkl\Database Update\Wkl.Data.Update.exe" status kunden
Stand von kunden.
Kunden, Schema 13
Paket 41 Kunden-schema-14.zip Schema 14 contract waiting Grund 7
Ein nicht abwärtsverträgliches Paket (contract) wartet auf Bestätigung.
C:\> "C:\Program Files\Wkl\Database Update\Wkl.Data.Update.exe" confirm kunden 41