以 serverstatus 为例,介绍借助 shawl 将任何程序作为 Windows 服务运行,并实现开机自启。
指标 | 描述 |
---|---|
适用系统 | Windows 10/11 |
走通流程时间 | 10 分钟 |
shawl 运行任意程序作为 Windows 服务
GitHub: mtkennerly/shawl: Windows service wrapper for arbitrary commands
安装 shawl
到 https://github.com/mtkennerly/shawl/releases 下载最新版本的压缩包,现在电脑基本都是 64 位,就下 shawl-v1.7.0-win64.zip 这种的。然后解压,里面有一个程序文件 shawl。
本文在桌面创建一个文件夹(C:/Users/AhFei/Desktop/serverstatus/
),名称为 serverstatus,将 shawl 移动到这个文件夹中,读者可自行选择这个文件夹创建的位置,但是选择好后就不能再移动,否则创建的服务无法运行。
以管理员权限打开命令行,后续会用到,可以使用下面步骤:
- Win + R 快捷键打开“运行”窗口(Win 就是徽标键,在空格左边,一般是一个窗口图案)
- 输入 cmd
- 再按住
ctrl
+shift
+enter
,会弹出框,允许后就会管理员权限运行了。 - 输入
cd C:/Users/AhFei/Desktop/serverstatus/
进入 shawl 的安装文件夹,记得改成自己的路径。
使用步骤
以 serverstatus-rust 为例,在 Windows 上使用可以看这篇文章: Rust 版 ServerStatus 探针安装步骤 - 技焉洲 ,直接在命令行运行 serverstatus 的命令是:
C:/Users/AhFei/Desktop/serverstatus/stat_client.exe -a "http://serverstatus.vfly2.com:8080/report" -u vfly2 -p 123
先测试原程序本身能否执行,如果成功运行,就能用 shawl 将其包装成系统服务。
用上面以管理员权限打开的命令行,添加系统服务:
shawl add --name serverstatus -- C:/Users/AhFei/Desktop/serverstatus/stat_client.exe -a "http://serverstatus.vfly2.com:8080/report" -u vfly2 -p 123
参数说明:
--name
,系统服务名称,如果有空格,就用""
包裹--
,后面跟启动原程序的命令。
然后,在【任务管理器】-【服务】中,就能找到新创建的 serverstatus 服务了。但是此时它还不能成功执行,也不能开机自启。

使用 sc 设置开机自启
sc 是 Service Control 的缩写,用于管理 Windows 服务,系统自带的工具。
用上面以管理员权限打开的命令行,再执行 sc 命令。
指定用户运行
由于 serverstatus 需要获取系统的各种信息,默认的执行用户无权限运行,所以使用sc
命令为服务配置指定用户:
sc config [服务名称] obj= ".\AhFei" password= "你的密码"
将 [服务名称]
替换为实际服务名,密码字段留空则使用空密码。需要注意:
- 账户格式使用
.\
前缀表示本地计算机账户 - 密码输入账号的密码,若使用空密码需保留空双引号
""
- 目标账户需具有"作为服务登录"的权限(可通过本地安全策略管理单元配置)
如:
sc config serverstatus obj=".\AhFei" password="456"
安全提示:此方法会在系统日志中留下明文密码记录,建议仅用于测试环境。生产环境推荐使用组策略管理服务账户。
设置完用户后,执行
sc start serverstatus
可以通过网页查看是否上线,或者查看 shawl 的日志,判断是否正常运行。正常运行则接着设置开机自启。
想要关闭自然就是
sc stop serverstatus
如果不行,比如密码中有特殊字符,可以在图形界面设置。
在【任务管理器】-【服务】中,随便选一个服务右键,点【打开服务】,进入“服务”窗口,找到 serverstatus,右键,点【属性】-【登录】,选择此账户,输入账号和密码即可。
设置开机自启
使用 sc 命令设置服务开机自动启动:
sc config "服务名称" start=auto
服务名称要完全正确(带空格的服务名需要加引号),start=后面直接跟参数,不要加空格。
支持的启动类型参数:
- auto(自动/延迟启动)
- delayed-auto(Win7之后支持真正的自动启动)
- demand(手动)
- disabled(禁用)
如:
sc config serverstatus start=auto
设置完成后建议运行sc qc 服务名
查看确认配置是否生效。
然后重启一下电脑,看开机后 serverstatus 是否能自动启动。
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (yanh.tech) 。