У нас есть собственное приложение, которое не работает с МНОГО сторонних ресурсов. При расторжении нужно так сказать изящно «отказаться от аренды».
Само приложение написано на .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, чем системного администрирования.