![Windows 服務:指定自訂停止命令](https://rvso.com/image/726828/Windows%20%E6%9C%8D%E5%8B%99%EF%BC%9A%E6%8C%87%E5%AE%9A%E8%87%AA%E8%A8%82%E5%81%9C%E6%AD%A2%E5%91%BD%E4%BB%A4.png)
我們有一個自訂應用程序,它與大量第三方資源混在一起。當終止時,我們需要優雅地「放棄租約」。
該應用程式本身是用 .NET Core 編寫的(並以真正的多平台運行能力為目標)。我們ExecStop
在 Linux 中使用 Systemd 的機制來呼叫我們的自訂幫助程式腳本 ( myapp cli shutdown
)。
這個幫助程序腳本也存在於 Windows 中,但我們不確定如何將其與 Windows 的服務管理實際結合。我們使用 NSSM 來保持服務本身的持續運行,但如果可以實現這一點,我們願意接受各種選擇。
我嘗試在 Windows 上用谷歌搜尋/搜尋 StackExchange 有關自訂停止命令的信息,但結果是空的。
有誰知道我們如何才能實現這一目標?
答案1
NSSM 的“關機”選項卡設定控制服務收到停止請求時發生的情況。 Control-C 和終止進程選項不太可能有用,但由於您的應用程式位於 .NET 中,因此它應該能夠接收和回應WM_CLOSE
和/或WM_QUIT
.我想這在 .NET Core 中也是可能的,儘管我不確定細節。
這Apache 共享守護程式可能更適合你。儘管它主要是為用 Java 編寫的服務而設計的,但它也可以運行任意可執行文件,並且該--StopImage
選項允許您在服務收到停止請求時運行命令列。
然而,如果您的應用程式實際上是一個服務,而不是使用 NSSM 或 Apache Commons Daemon 等第三方包裝器,那就更優雅了。這在 .NET 中很容易,在 .NET Core 中更難,但 Google 搜尋出現了如何使用 Visual Studio 2017 建立 .NET Core Windows 服務這應該可以幫助你開始。
如果您需要有關直接實現服務的更多詳細信息,您可能應該在 Stack Overflow 上詢問,因為這更多的是關於 Windows 程式設計而不是系統管理。