我在 NSSM(非吸吮服务管理器)的帮助下将桌面应用程序作为服务运行,它是针对未作为服务运行的应用程序的包装器。
我使用一台装有 Windows 10 的旧笔记本电脑作为服务器,运行一些应用程序作为 Windows 服务。笔记本电脑上没有任何用户登录,因此它需要的资源较少,而且由于 Windows 服务的存在,即使 Windows 安装新更新并重新启动,应用程序也始终在运行。
现在我更希望应用程序可以作为 Windows 服务自行运行,而无需其他应用程序 (NSSM) 的帮助,但我知道这永远不会发生。这些应用程序是桌面应用程序,永远不会作为服务运行;开发人员永远不会用这样的功能来增强它们。(我已经问过了。)
实际上,还有一种将应用程序作为服务运行的替代方法,那就是使用带有“在 Windows 启动时”触发器的任务计划程序启动该应用程序。
在这两种情况下,用户都无需登录,计算机可以自动重启,应用程序应始终在网络中可用。任务计划程序的优点是应用程序不需要任何包装器 (NSSM)。
但我不太确定任务计划程序的可靠性。Windows 服务旨在全天候运行应用程序,并且具有许多恢复选项。任务计划程序旨在定期运行应用程序,而不是全天候运行;因此没有任何恢复选项。
我的问题是:
带有“在 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
以下是一个例子:
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.exe
:
https://www.rozanski.org.uk/software
不久前听说过的一个工具,但从来没有用过。
我确信还有很多其他方法,但我会尝试sc.exe
方法 1。
答案3
更改使用 Windows 任务计划程序运行的应用程序的优先级很棘手。但我对服务不太了解。