使用Windows,经常需要将带界面的Windows 应用、exe可执行程序、bat批处理文件变为Windows服务,以便于后台运行,支持开启重启、进程保护等功能。
有众多的工具支持将exe文件封装为Windows服务,常用的工具包括:
Sc.exe/NSSM/WinSW/Shawl/AlwaysUp/FireDaemon

Sc.exe

https://learn.microsoft.com/zh-cn/windows/win32/services/controlling-a-service-using-sc

Windows系统内置命令,需要熟悉命令行操作,对新手不友好

以前还有SRVANY.exe,微软官方在 Windows 10/11 上已经不再提供支持,因此不推荐。

NSSM

https://nssm.cc/builds

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

https://www.firedaemon.com/

收费商业软件

可以看出,要将exe程序变为Windows服务,免费方案包括Sc.exe,NSSM,Winsw,Shawl,但各有优劣。

下面介绍其中的两款WinSW和NSSM,在Windows上使用这两款式软件可以快将EXE部署成为服务(为什么不直接写服务,我个人喜欢EXE调试测试方便OK之后 再部署成为服务这样方便)

NSSM(C++)

官方 http://www.nssm.cc/ 下载只有一个绿色EXE 使用方法命令行下 NSSM.exe install (对应移除使用 remove

在这里就可以选择你想要的EXE 且起对应的服务的名字(移除的时候需要这个名字)

如果是移除 使用 NSSM.exe Remove 弹出如下界面,填写名字移除

WinSW (C#)

https://github.com/winsw/winsw/releases github上就有

使用windsw 需要有对应的配置文件,如下面的xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<service>
<!-- 服务ID名称(唯一) -->
<id>Myserver</id>
<!-- 服务显示名称 -->
<name>Myserver</name>
<!-- 服务的描述信息 -->
<description>Minio文件存储服务器</description>

<!-- 可设置环境变量 -->
<env name="HOME" value="%BASE%"/>

<!-- 要执行的可执行文件 -->
<executable>%BASE%\minio.exe</executable>

<!-- 可执行文件传递的参数 -->
<arguments>server "%BASE%\data"</arguments>
<!-- <logmode>rotate</logmode> -->
<logpath>%BASE%\logs</logpath>
<log mode="roll-by-size-time">
<sizeThreshold>10240</sizeThreshold>
<pattern>yyyyMMdd</pattern>
<autoRollAtTime>00:00:00</autoRollAtTime>
<zipOlderThanNumDays>5</zipOlderThanNumDays>
<zipDateFormat>yyyyMMdd</zipDateFormat>
</log>
</service>

管理员身份运行CMD并定位到WinSW的安装目录,执行安装命令WinSWr install,此时我们的Windows服务列表中就多了一个叫Minio-Server的服务了

WinSW的各个命令

命令描述
install安装服务
uninstall卸载服务
start启动服务
stop停止服务
restart重启服务
status检查服务状态
refresh刷新服务属性而不是重新安装
customize--

配合这两图片应该基本使用方式 记录完了

从上面来看我个人喜欢有界面设置的NSSM