
使用Windows,经常需要将带界面的Windows 应用、exe可执行程序、bat批处理文件变为Windows服务,以便于后台运行,支持开启重启、进程保护等功能。
有众多的工具支持将exe文件封装为Windows服务,常用的工具包括:
Sc.exe
https://learn.microsoft.com/zh-cn/windows/win32/services/controlling-a-service-using-sc
Windows系统内置命令,需要熟悉命令行操作,对新手不友好
以前还有SRVANY.exe,微软官方在 Windows 10/11 上已经不再提供支持,因此不推荐。
NSSM
https://github.com/kirillkovalenko/nssm
开源,功能强大,但从2017年以后未再更新维护
Winsw
https://github.com/winsw/winsw
开源,功能强大但配置较为复杂,2023年后未再更新维护
Shawl
https://github.com/mtkennerly/shawl
开源,功能相对于NSSM、Winsw弱一些,目前还在更新维护
AlwaysUp
https://www.coretechnologies.com/products/AlwaysUp/
收费商业软件
FireDaemon
收费商业软件
可以看出,要将exe程序变为Windows服务,免费方案包括Sc.exe,NSSM,Winsw,Shawl,但各有优劣。
Servy 是一个开源支持把任何应用程序作为 Windows 服务运行的新项目,开发者对Sc.exe/NSSM/Winsw/Shawl 这些方案不是很满意,因此开发了Servy 。
Servy 允许您将任何应用作为原生 Windows 服务运行,并完全控制工作目录、启动类型、进程优先级、日志记录、健康检查、环境变量、依赖项、预启动脚本和参数。
相比 NSSM/WinSW/Shawl,Servy 一些值得推荐的特征:
- 积极维护,开发者一直在持续更新维护
- 适用于 Windows 7–11 + Server
- 提供 GUI 和命令行界面 (CLI),允许以交互方式或通过脚本和 CI/CD 管道创建、配置和管理 Windows 服务
- 允许设置自定义工作目录,解决了 Windows 服务的一个常见限制,避免了
C:\Windows\System32的问题 - 将 stdout/stderr 重定向到循环日志文件
- 内置健康检查和重启策略
Servy 对于将 Node.js、Python、.NET、Java、Go、Rust、PHP 或 Ruby 应用程序作为服务运行非常有用,可以作为NSSM/Winsw的不错替代。
项目地址:https://github.com/aelassas/servy