在 Windows 环境下,某些程序并没有提供原生的服务安装方式。以 serverstatus 客户端为例,本文将介绍如何借助 shawl 这款轻量工具,将任意命令行程序包装成 Windows 系统服务,并配置开机自动启动。
| 指标 |
描述 |
| 适用系统 |
Windows 10/11 |
| 走通流程时间 |
约 10 分钟 |
借助 shawl 将任意程序运行为 Windows 服务
shawl 是一个开源工具,项目地址:https://github.com/mtkennerly/shawl
安装 shawl
- 访问 https://github.com/mtkennerly/shawl/releases,下载最新版本的压缩包。对于主流 64 位系统,选择类似
shawl-v1.7.0-win64.zip 的文件。
- 解压下载的压缩包,其中包含一个名为
shawl 的可执行文件。
- 为了方便管理,建议创建一个专用目录。例如,在桌面创建
C:/Users/AhFei/Desktop/serverstatus/ 文件夹,并将 shawl 程序移动到此文件夹中。
重要提示:请谨慎选择此目录的位置,一旦使用 shawl 创建服务,后续移动此目录可能导致服务无法正常运行。
在开始操作前,你需要一个管理员权限的命令行窗口。获取方法如下:
- 按下
Win + R 组合键打开“运行”对话框。
- 输入
cmd。
- 按住
Ctrl + Shift + Enter 组合键,在弹出的用户账户控制窗口中点击“是”,即可打开管理员命令提示符。
- 使用
cd 命令切换到 shawl 所在的目录,例如:
cd C:/Users/AhFei/Desktop/serverstatus/
使用步骤
我们以 serverstatus-rust 客户端为例。假设在 Windows 上直接运行它的命令是:
C:/Users/AhFei/Desktop/serverstatus/stat_client.exe -a "http://serverstatus.vfly2.com:8080/report" -u vfly2 -p 123
请务必先确认你的程序能在命令行中正常启动和运行,这是将其转换为服务的前提。
保持刚才打开的管理员命令行,执行以下命令来创建系统服务:
shawl add --name serverstatus -- C:/Users/AhFei/Desktop/serverstatus/stat_client.exe -a "http://serverstatus.vfly2.com:8080/report" -u vfly2 -p 123
参数说明:
--name:指定系统服务的名称。如果名称包含空格,需要用双引号包裹,例如 --name “My Service”。
--:这个分隔符之后的内容,就是启动原始程序的完整命令。
执行成功后,你可以在任务管理器的“服务”标签页中找到新创建的 serverstatus 服务。不过此时它可能还无法成功运行,也尚未实现开机自启。

使用 sc 命令配置服务与开机自启
sc (Service Control) 是 Windows 系统自带的服务控制管理器,功能强大。我们需要继续在管理员命令行中使用它。
为服务指定运行账户
许多程序(例如需要采集系统指标的 serverstatus)在默认的“本地系统账户”下运行时权限不足。这时,我们需要为服务配置一个具有足够权限的本地用户账户。
使用以下命令格式:
sc config [服务名称] obj=".\用户名" password="你的密码"
- 将
[服务名称] 替换为你的实际服务名(本例中为 serverstatus)。
- 账户格式中的
.\ 前缀表示本地计算机账户。
password= 后填写该账户的密码。如果账户密码为空,则保留空双引号 ""。
示例:
sc config serverstatus obj=".\AhFei" password="456"
安全提示:此方法会在系统事件日志中留下明文密码记录,不建议在生产环境中使用。生产环境应考虑使用组策略管理的服务账户。
配置完成后,启动服务以测试是否正常:
sc start serverstatus
你可以通过程序本身的反馈机制(如查看 shawl 日志或访问 serverstatus 状态页)来确认服务是否运行成功。
停止服务的命令是 sc stop serverstatus。
如果因为密码复杂或格式问题导致上述命令失败,也可以通过图形界面设置:
- 在任务管理器的“服务”标签页中,右键任意服务,选择“打开服务”。
- 在服务管理窗口中找到你的服务(如
serverstatus),右键选择“属性”。
- 切换到“登录”选项卡,选择“此账户”,输入本地用户名和密码即可。
设置开机自动启动
确保服务能手动正常运行后,即可设置其开机自启。使用 sc config 命令的 start= 参数:
sc config “服务名称” start=auto
- 服务名称必须准确,若包含空格则需用引号括起。
start= 后面直接跟启动类型参数,等号后不要有空格。
常用启动类型参数:
auto:自动启动(对于Win7及之后系统,通常意味着“自动(延迟启动)”)。
delayed-auto:延迟自动启动(在系统启动并稍作等待后启动,有助于加快开机速度)。
demand:手动启动。
disabled:禁用。
为我们的 serverstatus 服务设置自动启动:
sc config serverstatus start=auto
设置完成后,建议运行 sc qc serverstatus 命令来查询并确认配置已生效。
最后,重启计算机,验证 serverstatus 服务是否随着系统启动而自动运行。至此,你就完成了一个普通程序从手动运行到作为系统服务开机自启的完整配置。如果在其他系统管理任务中遇到问题,可以在云栈社区的相关板块与更多开发者交流探讨。
原文链接: https://yanh.tech/2025/02/run-as-a-windows-service/
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 https://yanh.tech/ 。