开机自启失效:三种方式的排查

客户端里勾选了"开机自启",重启后却没起来。这种情况在 Windows 上尤其常见,原因通常是下面三类之一。

Windows:先看它注册到哪了

Windows 的开机自启有四个位置,客户端可能注册在任意一个:

  1. 启动文件夹:shell:startup 打开的那个目录
  2. 注册表 Run 键:HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  3. 任务计划程序:最可靠,支持提权和延迟
  4. 系统服务:开机即启动,不依赖用户登录

检查方法:任务管理器 →「启动」标签页,这里能看到前两类。如果列表里没有你的程序,说明注册失败了,不是"被禁用"。

三种常见失败原因

一、权限不够

程序装在 Program Files 下,但注册表写在当前用户下,普通权限启动时读不到配置。改用任务计划程序,并勾选"使用最高权限运行"。

二、启动了但立刻退出

开机时网络还没就绪,客户端连不上服务器就自己退了。处理办法:给启动项加延迟(任务计划里可以设"延迟 30 秒")。

三、被安全软件拦了

部分安全软件会阻止程序修改启动项,且不弹提示。检查安全软件的"启动项管理",看有没有被静默禁用。

macOS:三种方式

一、登录项:系统设置 → 通用 → 登录项,这里是最常见的入口。

二、LaunchAgents:~/Library/LaunchAgents/ 下的 plist 文件,用户登录后加载。

三、LaunchDaemons:/Library/LaunchDaemons/,开机就加载,不需要登录。

检查命令:

launchctl list | grep 你的程序名

有输出说明已注册;没有说明没装上。

什么时候不该开机自启

开机自启会拖慢系统启动,也会在网络没就绪时产生一堆失败连接。以下情况建议关掉:

  • 笔记本经常在没网的环境开机(咖啡厅、飞机)
  • 只在特定场景用(出差、临时访问)
  • 和其他网络工具冲突(两个客户端同时起会抢端口)

手动启动多花两秒,但省掉了开机后的一堆报错日志。

验证方法

不要靠"重启试试"来验证,太慢。直接看进程:

# Windows
tasklist | findstr 程序名

# macOS / Linux
ps aux | grep 程序名

刚开机时立刻跑一次,能查到说明自启成功。

💡 最稳的做法:用任务计划程序(Windows)或 LaunchDaemon(macOS),加 30 秒延迟。比启动文件夹和 Run 键可靠得多,也不受用户登录时机影响。

延伸阅读:端口被占用怎么排查、多配置文件怎么用、连接日志怎么看。