Служба Windows: указание пользовательской команды остановки

Служба Windows: указание пользовательской команды остановки

У нас есть пользовательское приложение, которое портит МНОГО ресурсов третьих лиц. При завершении нам нужно изящно "отказаться от аренды", так сказать.

Само приложение написано на .NET Core (и нацелено на настоящую многоплатформенную работоспособность). Мы используем ExecStopмеханизм Systemd в Linux для вызова нашего пользовательского вспомогательного скрипта ( myapp cli shutdown).

Этот вспомогательный скрипт существует и в Windows, но мы не уверены, как на самом деле связать его с управлением службами Windows. Мы используем NSSM, чтобы поддерживать саму службу непрерывно, но открыты для вариантов, если это возможно.

Я пробовал гуглить / искать на StackExchange информацию о пользовательской команде остановки в Windows, но ничего не нашел.

Кто-нибудь знает, как это осуществить?

решение1

NSSM-ыНастройки вкладки «Выключение»контролировать, что происходит, когда служба получает запрос на остановку. Параметры Control-C и Terminate process вряд ли будут полезны, но поскольку ваше приложение находится в .NET, оно должно иметь возможность получать и отвечать на WM_CLOSEand/or WM_QUIT. Я полагаю, что это также возможно в .NET Core, хотя я не уверен в деталях.

TheДемон Apache Commonsможет быть более подходящим для вас. Хотя он разработан в первую очередь для служб, написанных на Java, он также может запускать произвольные исполняемые файлы, а опция --StopImageпозволяет вам запускать командную строку, когда служба получает запрос на остановку.

Однако было бы более элегантно, если бы ваше приложение на самом деле было службой, а не использовало стороннюю оболочку, такую ​​как NSSM или Apache Commons Daemon. Это легко в .NET, сложнее в .NET Core, но поиск в Google выдалКак создать службы Windows .NET Core с помощью Visual Studio 2017что должно помочь вам начать.

Если вам нужны более подробные сведения о непосредственной реализации сервиса, вам, вероятно, следует обратиться на Stack Overflow, поскольку эта тема больше касается программирования для Windows, чем системного администрирования.

Связанный контент