Назад | Перейти на главную страницу

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

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

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

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

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

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

НССМ Настройки вкладки "Завершение работы" контролировать, что происходит, когда служба получает запрос на остановку. Параметры процесса Control-C и Terminate вряд ли будут полезны, но поскольку ваше приложение находится в .NET, оно должно иметь возможность получать и отвечать на WM_CLOSE и / или WM_QUIT. Я полагаю, что это возможно и в .NET Core, хотя я не уверен в деталях.

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

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

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