EasyService – 让程序以 Windows 系统服务的方式,无窗口运行
EasyService 是一个只有 16KB 的小程序,它可以让需要长时间运行的 Windows 程序,以系统服务的方式,无窗口后台运行。典型的应用,比如命令行内网穿透 frp 工具、各种 Nodejs、Python 小工具。@Appinn
有很多没有图形界面的程序,会使用 Windows 下的命令提示符界面,看起来…丑丑的,以及很碍事。
而 Windows 并没有一个很方便的后台运行方式,于是,利用系统服务来运行一些程序,就是一种非常优雅的使用方式了。
比如之前小众软件写过的免费开源内网穿透工具 frp 教程。frp 可以让你在不考虑公网 IP 的情况下, 随时从外连接回家,使用 NAS、远程桌面等服务,但 frp 会在桌面留下一个命令提示符。
注意使用 frp 的前提意,需要一个公网 IP 作为中转节点。这个节点可以是拥有固定公网 IP 的任意电脑,也可以自配一台 VPS,青小蛙依旧推荐 Vultr 的机器,便宜好用,控制面板简单。可以另外通过青小蛙的推荐链接注册(有返利),还送 50 刀体验金,仅限新用户。Vultr 推荐美国、德国的机器。
如果不嫌麻烦,也可以试试腾讯云的特价服务器,一年只需要 88 元,(推荐注册地址 有返利),优点肯定是连接响应速度快了,但带宽略小。
现在,我们就用 EasyService 把这个命令提示符窗口隐藏起来,让它在后台运行。
EasyService 教程
假设你已经看过 frp 教程,并成功设置了服务器与客户端。下面就用 EasyService 将 frp 的 Windows 客户端窗口隐藏起来。
配置文件
- 下载解压缩 EasyService(19.8KB)
- 将 frp 客户端放到 EasyService 文件夹
- 编辑
svc.conf
文件:
ServiceName: Frp Service
Worker: frpc.exe -c frpc.ini
WorkingDir: frp
OutFileDir: outfiles
WorkerEncoding: utf8
确保此时的 EasyService 文件夹有以下的几个文件和文件夹:
- frp 文件夹(包含配置文件)
- svc.conf
- svc.exe
测试配置文件
然后,在 EasyService 文件夹的地址栏,直接输入 cmd
打开当前文件夹的命令提示符,输入测试命令:
svc.exe check
svc.exe test-worker
如果能看到下面的提示,就证明测试成功,没有问题了。
安装系统服务
此时需要使用管理员权限的命令提示符(在开始菜单中搜索 cmd 然后右键以管理员身份运行)。切换至 EasyService 目录(上图为例 C:\TOOLS\easy-service-master):
cd C:\TOOLS\easy-service-master
svc.exe install
启动系统服务之后,frp 就已经开始运行了,即便用户注销也不会停止运行,且系统开机后、用户登录之前就会自动运行。在服务管理控制台中可以查看已注册的服务。
重启、停止、删除系统服务
只需要运行以下命令,即可:
- svc stop 停止
- svc start 开始
- svc estart 重启
- svc remove 删除
然后,就可以愉快的使用 frp 并且看不见那个烦人的窗口了。EasyService 在 GitHub 开源。
EasyService 原理
EasyService 实质是将自己(svc.exe)注册为一个系统服务,此服务启动时,会读取 svc.conf 中的配置,创建一个子进程运行 Worker 中指定的程序及命令行参数,之后,监视该子进程,如果发现子进程停止运行,会重新启动一个子进程。而当此服务停止时,会向子进程的标准输入中写入数据 “exit” ,并等待子进程退出,如果等待时间超过 10 秒,则直接终止子进程。
多个服务需要运行多个 EasyService。
其他的选择
青小蛙在几个月前还写过一篇通过 nssm 工具实现同样效果的教程:
详见这里:https://meta.appinn.net/t/frp/11319/3