Windows 服務:指定自定義停止命令
我們有一個自定義應用程序,它與大量的第 3 方資源混為一談。終止時,我們需要優雅地“放棄租約”。
該應用程序本身是用 .NET Core 編寫的(並針對真正的多平台執行能力)。我們在 Linux 中使用 Systemd 的
ExecStop
機制來呼叫我們的自定義幫助腳本 (myapp cli shutdown
)。該幫助腳本也存在於 Windows 中,但我們不確定如何將其與 Windows 的服務管理實際聯繫起來。我們使用 NSSM 來保持服務本身的持續執行,但如果可以實現,我們也可以選擇。
我嘗試在 Windows 上搜尋/搜尋有關自定義停止命令的 StackExchange,但結果為空。
有誰知道我們如何才能做到這一點?
NSSM 的“關閉”選項卡設置控制服務收到停止請求時發生的情況。Control-C 和 Terminate 程序選項不太可能有用,但由於您的應用程序在 .NET 中,它應該能夠接收和響應
WM_CLOSE
和/或WM_QUIT
. 我想這在 .NET Core 中也是可能的,儘管我不確定細節。Apache Commons Daemon可能更適合您。雖然它主要是為用 Java 編寫的服務設計的,但它也可以執行任意執行檔,並且該
--StopImage
選項允許您在服務接收到停止請求時執行命令行。然而,將您的應用程序實際作為服務而不是使用第三方包裝器(如 NSSM 或 Apache Commons Daemon)會更優雅。這在 .NET 中很容易,在 .NET Core 中更難,但是 Google 搜尋出現瞭如何使用 Visual Studio 2017 創建 .NET Core Windows 服務,這應該可以幫助您入門。
如果您需要有關直接實現服務的更多詳細資訊,您可能應該在 Stack Overflow 上詢問,因為這更多的是關於 Windows 程式而不是系統管理。