Windows

Windows 服務:指定自定義停止命令

  • September 7, 2018

我們有一個自定義應用程序,它與大量的第 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 程式而不是系統管理。

引用自:https://serverfault.com/questions/929868