什么是 EasyService
如果你的 Windows
程序需要在后台长期运行,而且你希望它在开机后用户登录之前就自动运行、且在用户注销之后也不停止,那么你需要将程序注册为一个系统服务。
然而,在 Windows
下编写一个可注册为系统服务的程序并不是一件简单的事情。首先,程序必须是二进制的可执行程序,这就排除了脚本语言和虚拟机语言;其次,程序必须按系统服务的格式编写,过程相当繁琐。
EasyService
是一个可以将常规程序注册为系统服务的工具,体积只有 16KB 。你可以按常规的方法编写程序,然后用 EasyService
注册为一个系统服务,这样你的程序就可以在开机后用户登录之前自动运行、且在用户注销之后也不会停止。
如果你需要在 Windows
系统下部署网站、API
或其他需要长期在后台运行的服务, EasyService
将是一个很有用的工具。
EasyService 实现原理
EasyService
实质是将自己(svc.exe
)注册为一个系统服务,此服务启动时,会读取 svc.conf
中的配置。然后创建一个子进程运行 Worker
中指定的程序及命令行参数并监视该子进程。如果发现子进程停止运行,会重新启动一个子进程。而当此服务停止时,会向子进程的标准输入中写入数据 “exit
” ,并等待子进程退出,如果等待时间超过 10 秒,则直接终止子进程。
使用 EasyService
EasyService
对程序仅有一个强制要求和一个建议。
-
强制要求: 程序应持续运行
-
建议: 当程序的标准输入接收到 “
exit
” 后在 10 秒之内退出
这类型典型的程序有很多,比如:命令行内网穿透 frp
工具、各种 Nodejs
、Python
小工具等等。
- 安装 EasyService
安装 EasyService
的前提是系统已安装 .NetFramework 4.0
(大部分 Windows
系统都已自带)。然后你就可以通过下面的地址下载对应的安装程序。
1 | https://github.com/pandolia/easy-service/archive/master.zip |
- 编辑配置文件
解压上面的安装压缩包,然后打开 svc.conf
文件,并根据需求修改配置。
1 | # 需要注册成 Windows 系统服务的名称,不能与系统中已有服务重名 |
- 注册成为一个服务
用管理员账号登录系统后,在 svc.exe
所在的目录下打开命令行窗口。
-
首先,运行
svc check
命令检查配置是否合法。 -
其次,运行
svc test-worker
命令测试Worker
程序是否能正常运行。
测试无误后,接着执行以下命令。
- 运行
svc install
命令注册并启动系统服务,此时你的程序就已经开始运行了。即便用户注销也不会停止运行,且系统开机后、用户登录之前就会自动运行。你在服务管理控制台中也可以查看已注册的服务。
注意:
Windows 10
系统下,需要先在开始菜单中搜索cmd
命令。然后右键以管理员身份运行后,再切换到svc.conf
所在的目录并执行以上命令。
如果要在命令行下管理新注册的服务,你可以使用以下这些命令:
1 | $ svc stop # 停止一个服务 |
- 注册多个服务
如果需要注册多个服务,你可以先新建多个目录,并将 svc.exe
和 svc.conf
拷贝到这些目录。然后修改各目录 svc.conf
文件中的服务名和程序名等内容。最后,再在这些目录下以管理员权限打开命令行窗口执行 svc check|test-worker|install
等命令就可以了。需要注意的是:
-
不同目录下的服务名不能相同,也不能和系统已有的服务同名。
-
配置文件中的
Worker/WorkingDir/OutFileDir
都是相对于该配置文件的路径。 -
注册服务之前,
WorkingDir/OutFileDir
所指定的目录必须先创建好。
至此,如何利用 EasyService
快速注册一个服务的方法就介绍完了,你学会了吗?