EasyService:只有十几 KB、能把一个命令行程序注册成 Windows 系统服务

17次阅读
没有评论
EasyService 免费下载
获取下载链
微信关注「软件教程管家」公众号,回复 EasyService
官方渠道:GitHub 仓库

30秒速读:有些 Windows 程序没有图形界面,只能待在命令提示符窗口里运行,关掉窗口程序就停了,看着也碍事。EasyService就是为解决这个问题准备的小工具:它只有十几 KB,能把一个命令行程序注册成 Windows 系统服务,让程序在后台无窗口运行,开机后、用户登录之前就能启动,注销后也不会停。本篇讲清楚它怎么选、怎么配、怎么装,以及装完必须做好的四件事。

项目信息

软件名 EasyService
大小 约 16KB,解压后约 19.8KB
平台 Windows
版本 未标注版本号,以 GitHub Releases 为准
授权 开源项目

EasyService 让程序以 Windows 系统服务的方式无窗口运行

版本选择:三种后台运行方式,推荐哪一种

让命令行程序在后台待着,常见做法有三种,差别不在能不能跑,而在断不断、烦不烦人。结论先行:需要长期运行、开机自启、注销后继续跑的,选系统服务方式,也就是 EasyService 的做法;只是临时跑一次的,不必折腾服务。

方式 窗口还在不在 注销后还跑吗 适合谁
系统服务方式(EasyService) 不在,后台运行 跑,开机后、登录前即可启动 长期运行的命令行工具
直接双击命令行运行 在,一直占一个窗口 停,关窗口或注销即停 临时调试、只跑几分钟
其他服务包装工具 不在,后台运行 跑,取决于具体配置 已有现成配置、不想换工具的人

一句话判断:这个程序是不是要像内网穿透客户端、本地小服务那样常年在线?是,就用服务方式;不是,就别注册服务,临时跑完就关更干净。

安装步骤:先测试,再注册服务

EasyService 本身不需要安装向导,解压即用,但顺序不能反:先把配置文件写对、测试通过,再注册成服务。跳过测试直接注册,出问题时要先删服务再排错,反而更麻烦。

  1. 下载并解压 EasyService,把要托管的命令行程序放进同一个文件夹。典型例子是内网穿透客户端:把客户端程序和它的配置文件放进 EasyService 文件夹里的子文件夹。
  2. 编辑配置文件 svc.conf,写清服务名、要运行的程序和命令行参数、工作目录和输出目录(写法见下一节)。
  3. 在当前文件夹打开命令提示符,先跑测试命令,确认配置没有写错。
  4. 测试通过后,用管理员权限打开命令提示符,切换到 EasyService 目录,执行安装命令,把它注册成系统服务。
  5. 到系统服务管理控制台里确认服务已经在列表中,再启动服务,观察托管的程序是否正常运行。

关键卡点只有一个:安装服务必须用管理员权限。普通权限下注册服务会失败,这不是配置文件写错了,换管理员权限重跑安装命令即可。

配置文件怎么写:svc.conf 的五个字段

EasyService 的全部配置都在 svc.conf 这一个文件里,字段不多,但每个字段缺了都会影响运行。下面以托管内网穿透客户端为例,字段含义和示例写在一起,照着改自己的程序名和参数即可。

字段 含义 示例
ServiceName 服务在系统里的名字 Frp Service
Worker 真正要运行的程序和参数 frpc.exe -c frpc.ini
WorkingDir 程序运行时的所在目录 frp
OutFileDir 程序输出文件的存放目录 outfiles
WorkerEncoding 程序输出的文字编码 utf8

配置文件写好后,文件夹里应当同时有这几样东西:服务程序本身、配置文件 svc.conf、托管程序所在的子文件夹。缺了任何一样,测试命令就会先报错,正好在注册服务之前把问题拦下来。

装完必做的四件事:名字、目录、编码、监护

服务装好不等于可以不管了。下面四件事都做在配置文件里,入口都是 svc.conf,做完之后服务才算真正可用,缺一项都可能在日后返工。

第一,服务名要取一眼能认出的名字。入口是 svc.conf 里的 ServiceName 一行。服务管理器里的服务成百上千,名字写成程序本身的名字加 Service 后缀,日后停服务、删服务时不用逐个点开确认,体感差别就是找服务从翻半天变成一眼找到。

第二,工作目录和输出目录要分开。入口是 WorkingDir 和 OutFileDir 两行。程序运行目录放程序和配置,输出目录单独放运行输出,两边不混在一起,排错时不用在程序文件里翻日志,清理输出也不会误删程序文件。

第三,输出编码设为 utf8。入口是 WorkerEncoding 一行,示例值就是 utf8。托管的程序如果输出中文,编码不对时日志里中文会显示成乱码,看不出程序到底报了什么错,设对编码后日志才能直接读。

第四,理解它的监护行为:子进程停了会重启。这不是一个需要手动打开的开关,而是 EasyService 的工作原理:服务启动时会创建一个子进程运行 Worker 指定的程序,并监视这个子进程,子进程停止后会重新启动它。服务停止时,它会先向子进程的标准输入写入 exit,等子进程退出,超过 10 秒仍未退出则直接终止。理解这一点后,调试时就不会误以为程序自己反复启动是故障,也知道停服务要走正规的停止命令,而不是直接删文件。

日常管理:启动、停止、删除怎么做

服务注册好之后,日常管理只有几个命令,全部在服务所在目录用服务程序执行。停止是 svc stop,开始是 svc start,删除服务是 svc remove。需要重启时,先停止再开始,不要直接删文件:文件删了,服务注册信息还在系统里,反而留下一个指向不存在程序的空服务。

测试阶段同样有专用命令:svc check 和 svc test-worker,作用是先验证配置文件能不能跑通。正式使用前跑一遍测试,等于把配置错误挡在注册服务之前,这是最省时间的一步。

常见问题:装不上、还在窗口里、多程序怎么办

安装服务时报错,第一反应不是改配置,而是换管理员权限。注册系统服务需要管理员权限,普通命令提示符下安装命令过不了。换管理员权限的命令提示符,切换到服务目录再执行安装命令,多数安装失败到此为止。

程序还在命令提示符窗口里,说明它根本没有走服务。先确认自己启动的是服务,而不是双击了程序本身。服务方式下程序由服务拉起,不会留下一个命令提示符窗口;如果窗口还在,说明当前运行的是手动启动的那一份,先停掉手动那一份,再看服务里的那一份是否正常。

多个程序要后台运行,不能共用一个服务。一个服务只对应一个 Worker,也就是一个要托管的程序。需要同时托管多个程序时,每个程序单独配一份 EasyService、注册成各自的服务,名字也要区分开,否则停一个服务会连带影响另一个。

注销电脑后程序停了,先看服务状态而不是重装。按设计,服务在用户注销后仍会继续运行,开机后、用户登录之前就会启动。如果注销后程序停了,优先到服务管理控制台确认该服务是否处于运行状态、启动类型是否被改过,而不是删掉重装一遍。

适合谁,不适合谁

适合的人很明确:需要在 Windows 上长期运行命令行工具的人,比如内网穿透客户端、本地 Node.js 或 Python 小工具,讨厌桌面上一直挂着命令提示符窗口,又希望开机就能跑、注销也不停。对这类人,EasyService 的价值不在功能多,而在够小、够直接:一个配置文件加几个命令,就把后台运行这件事交代清楚了。

不适合的人同样明确:程序本身已有图形界面,或者只是临时跑一次、跑完就关的人。这类需求不需要注册服务,注册了反而多一个需要管理的服务,日后清理时还要记得删服务。还有一种情况不适合直接套用:托管的程序本身需要频繁交互输入,服务方式下没有窗口可供交互,交互式程序仍应留在前台运行。

获取方式:微信关注公众号软件教程管家,回复 EasyService,即可获取下载地址。

推广EasyService 免费下载

关注「软件教程管家」

回复软件名即取即下:网盘下载链接 + 提取码,一步直达,不用再跳转。

版权与使用提示

本站资源仅供个人学习交流,请勿用于商业用途。软件与资料版权归原作者所有;如有侵权,请通过公众号「软件教程管家」联系我们,我们将在 24 小时内下架处理。查看免责声明 ›

上次编辑至今:10小时 · 内容还比较新鲜

公告

契机库网站正式上线!

了解更多
正文完
 0
评论(没有评论)