Windows 开机自启:脚本、EXE、Python 服务的四种做法

Windows 上”开机自启”根据程序性质要选不同方式。一股脑塞启动文件夹经常出问题——GUI 程序有个 UAC 弹窗、脚本要读用户目录、长驻服务要跑在 SYSTEM 下——分类拆开来看。

方式一:启动文件夹(普通程序)

Win + R 打开:

shell:startup

这是当前用户的启动目录。把 .exe.lnk 快捷方式扔进去就行。全用户共用:

shell:common startup

局限:

  • 用户登录后才启动
  • 弹 UAC 会需要手动点
  • 关了窗口就没了

适合:桌面小工具、常用软件(VSCode、Chrome 等已经自带这个)。

方式二:NSSM 把脚本包成服务(推荐)

长驻的 Python、Node、FastAPI、Uvicorn 等脚本,最省心是用 NSSM。它能把任何 exe/bat/脚本包装成 Windows 服务。

管理员 CMD:

nssm install MyService

弹出 GUI,填三项:

Application → Path:              C:\Python311\python.exe
Application → Arguments:         -m uvicorn main:app --host 0.0.0.0 --port 8000
Application → Startup directory: D:\project

设自动启动:

sc config MyService start= auto

start=auto 之间必须有空格。)

启动 / 停止 / 删除:

net start MyService
net stop  MyService
nssm remove MyService confirm

NSSM 的好处:

  • 崩溃自动重启(Details 里配 Exit Action)
  • stdout / stderr 可以重定向到日志文件
  • 支持环境变量、依赖、恢复策略
  • 卸载干净

方式三:原生 sc create(真 EXE 程序)

已经写成了 Windows Service 兼容的 EXE:

sc create MyService binPath= "D:\app\server.exe" start= auto
sc start   MyService
sc delete  MyService

局限:

  • 只能接已经实现了 ServiceMain 的 EXE
  • 普通脚本用这个会秒退,要靠 NSSM

方式四:任务计划程序(脚本 / GUI / 用户上下文)

需要在用户登录后启动、或者要 GUI、或者 SYSTEM 下跑不了的:

schtasks /create /tn "MyTask" ^
  /tr "C:\Users\me\bin\worker.py" ^
  /sc onlogon

场景:

  • 只登录时启动:/sc onlogon
  • 每次开机(不管登录):/sc onstart(需要管理员)
  • 每天 03:00:/sc daily /st 03:00

管理:

schtasks /query /tn "MyTask"
schtasks /run   /tn "MyTask"
schtasks /delete /tn "MyTask" /f

选哪一种

场景推荐
只想开机跑一次的桌面程序启动文件夹
Python/Node 长驻脚本、API、爬虫NSSM(默认选它)
已经是 Windows Service 兼容 EXEsc create
GUI 程序、要用户桌面 session任务计划 onlogon
系统级、无用户登录也要跑任务计划 onstart 或 NSSM

一句话总结

长驻脚本 = NSSM,开机自动、崩溃自愈、日志齐全。其它类型再按上面表格分。