Windows 服務與具有啟動觸發器的任務排程程序

Windows 服務與具有啟動觸發器的任務排程程序

我在 NSSM(非吸吮服務管理員)的幫助下將桌面應用程式作為服務運行,NSSM 是不作為服務運行的應用程式的包裝器。

我使用一台裝有 Windows 10 的舊筆記型電腦作為伺服器,運行一些應用程式作為 Windows 服務。在筆記型電腦上,沒有任何用戶登錄,因此需要較少的資源,並且由於 Windows 服務,應用程式在 Windows 安裝新更新和重新啟動時也始終運行。

現在,我更希望應用程式可以作為 Windows 服務自行運行,而無需其他應用程式 (NSSM) 的幫助,但我知道這永遠不會發生。這些應用程式是桌面應用程序,從來不作為服務運行;開發人員永遠不會用這樣的功能來增強它們。 (我已經問過了。)

實際上,有一種替代方法可以將應用程式作為服務運行,它可以透過「在 Windows 啟動時」觸發器使用任務計劃程式啟動應用程式。

在這兩種情況下,用戶都不必登錄,電腦可以自動重新啟動,並且應用程式應該始終在網路中可用。任務規劃程式的優點是應用程式不需要任何包裝器 (NSSM)。

但我不太確定任務規劃程序的可靠性。 Windows 服務旨在 24/7 運行應用程序,並且具有許多恢復選項。任務計劃程序旨在定期運行應用程序,而不是 24/7;因此沒有任何恢復選項。

所以我的問題是:

具有「Windows 啟動時」觸發器的任務排程器是否是 Windows 服務的有效替代方案?

有人對這兩種方法都有經驗並且可以更好地解釋這兩種方法的優點和缺點嗎?

答案1

是的,在您的用例中確實如此,但是我的理解是,任務調度程序通常期望任務在某個時刻結束(實際上有一個預設選項如果任務沒有自行結束,則強制任務結束)並且您可能會以這種方式運行來測試一些未知的任意或至少不可預見的限制。如果您確實使用計劃任務,那麼擁有單獨的任務可能是更好的方法啟動應用程式的排程任務另一個用於停止(和/或重新啟動)應用程式。您可以安排啟動任務在 Windows 啟動時執行,並透過遠端管理執行其他任務。

它不等價的一個領域是服務依賴性。沒有內建方法可以使計劃任務依賴另一個任務來運行,但可以使用服務。另一個領域是事件記錄。我懷疑這些在您的用例中都沒有用,因為許多應用程式在必要時保留自己的日誌,並且不依賴其他應用程式來運行。

兩者都具有故障後恢復/重新啟動的選項

服務恢復

計劃任務恢復

並且兩者都可以配置為啟動後延遲啟動。

服務延遲啟動

計劃任務延遲啟動

答案2

我可以給你留言,因為谷歌有時很有用,但我記得很久以前我就想實現同樣的目標。在這種情況下,我使用了 Windows Server 2003 的資源工具包。不幸的是,我沒有找到有關我當時使用的資訊*

不過,谷歌搜尋顯示了很多結果:

1)使用sc.exe https://support.microsoft.com/en-us/help/251192/how-to-create-a-windows-service-by-using-sc-exe

https://stackoverflow.com/questions/3663331/when-creating-a-service-with-sc-exe-how-to-pass-in-context-parameters

這是一個例子:

C:\Documents and Settings\Administrator> sc create asperacentral binPath= "C:\Program Files\Aspera\Enterprise Server\bin\Debug\asperacentral.exe" DisplayName= "Aspera Central" start= auto

2)使用*svrany:這是我正在使用的工具,只是想起來了。但它現在已經很舊了,我不建議你使用它,儘管我猜它仍然可以工作(在 Windows 7 上可以)。

3)使用srvstart.exehttps://www.rozanski.org.uk/software

不久前聽說的一個工具,從未使用過。

我確信還有很多很多其他方法,但我會嘗試sc.exe方法 1。

答案3

更改使用 Windows 任務計劃程式運行的應用程式的優先順序是很棘手的。但不知道服務怎麼樣。

相關內容