Windows-Dienst: Angeben eines benutzerdefinierten Stoppbefehls

Windows-Dienst: Angeben eines benutzerdefinierten Stoppbefehls

Wir haben eine benutzerdefinierte Anwendung, die mit einer MENGE Ressourcen von Drittanbietern in Konflikt gerät. Bei der Beendigung müssen wir sozusagen den „Mietvertrag“ aufgeben.

Die App selbst ist in .NET Core geschrieben (und zielt auf echte Multiplattformfähigkeit ab). Wir verwenden den ExecStopMechanismus von Systemd in Linux, um unser benutzerdefiniertes Hilfsskript ( myapp cli shutdown) aufzurufen.

Dieses Hilfsskript gibt es auch in Windows, aber wir sind uns nicht sicher, wie wir es tatsächlich in die Dienstverwaltung von Windows einbinden können. Wir verwenden NSSM, um den Dienst selbst kontinuierlich am Laufen zu halten, sind aber offen für Optionen, wenn dies erreicht werden kann.

Ich habe versucht, bei Google bzw. in StackExchange nach einem benutzerdefinierten Stoppbefehl für Windows zu suchen, bin aber leer ausgegangen.

Weiß jemand, wie wir das schaffen können?

Antwort1

NSSMsEinstellungen der Registerkarte „Herunterfahren“steuern, was passiert, wenn der Dienst eine Stoppanforderung erhält. Die Optionen „Strg-C“ und „Prozess beenden“ sind wahrscheinlich nicht nützlich, aber da Ihre Anwendung in .NET ist, sollte sie in der Lage sein, WM_CLOSEund/oder zu empfangen und darauf zu reagieren WM_QUIT. Ich kann mir vorstellen, dass dies auch in .NET Core möglich ist, bin mir jedoch bei den Details nicht sicher.

DerApache Commons Daemonkönnte für Sie besser geeignet sein. Obwohl es in erster Linie für in Java geschriebene Dienste entwickelt wurde, kann es auch beliebige ausführbare Dateien ausführen, und die --StopImageOption ermöglicht es Ihnen, eine Befehlszeile auszuführen, wenn der Dienst eine Stoppanforderung erhält.

Es wäre jedoch eleganter, wenn Ihre Anwendung tatsächlich ein Dienst wäre, anstatt einen Wrapper eines Drittanbieters wie NSSM oder den Apache Commons Daemon zu verwenden. Das ist in .NET einfach, in .NET Core schwieriger, aber eine Google-Suche ergabSo erstellen Sie .NET Core Windows-Dienste mit Visual Studio 2017Das sollte Ihnen den Einstieg erleichtern.

Wenn Sie weitere Einzelheiten zur direkten Implementierung eines Dienstes benötigen, sollten Sie wahrscheinlich bei Stack Overflow nachfragen, da es hier eher um Windows-Programmierung als um Systemadministration geht.

verwandte Informationen