Windows-Server-2008

如何按順序系統地關閉 Windows 服務?

  • September 7, 2012

我們有這個具有三 (3) 項服務的開源應用程序。出於這個問題的目的,我們稱它們為ABC

現在,它們必須按特定順序關閉。該順序將是 A 然後 B 然後 C。

如果 B 在 A 之前關閉,那麼我們就會遇到各種問題。如果 C 在 B 或 A 之前關閉,情況也是如此。此外,由於有多少使用者在使用它,每個服務可能需要不同的時間來關閉。

哦,這需要包含在 DOS 批處理文件中,或者非技術使用者只需點兩下即可啟動。(PowerShell 不是不可能的,但我從未使用過它)。另外,我是 C# 編碼器,因此也可以使用。

無論如何,當啟動重新啟動時,需要發生以下情況:

1) Initiate shutdown of service A
2) When service A is down, it should trigger the shutdown of service B
3) When service B is down, it should trigger the shutdown of service C
4) When service C is down, it should trigger the START UP of service A
5) When service A is UP, it should trigger the START UP of service B
6) When service B is UP, it should trigger the START UP of service C

如您所見,每次停止/開始都需要等待前一次完全完成才能繼續。而且由於每個服務可能需要幾秒鐘到幾分鐘,我們不能使用任何類型的計時技巧。

建議非常感謝。

謝謝!

您可以使用 PowerShell 執行此操作。要停止服務,請使用 Stop-Service 命令。使用 Start-Service 命令啟動服務。因此,您可以為需要停止的每個服務創建一個包含如下條目的腳本,按順序:

Stop-Service ServiceA
do { Start-Sleep -Milliseconds 200}
until ((get-service ServiceA).status -eq 'Stopped')

並啟動服務:

Start-Service ServiceA
do { Start-Sleep -Milliseconds 200}
until ((get-service ServiceA).status -eq 'Running')

然後,您可以在腳本中將 6 個這些程式碼塊串在一起,將其保存為 .ps1 文件,然後從 powershell 提示符執行它,如下所示:

PS C:\> C:\Path\To\Script\script.ps1

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