Windows开机自启有四种方法:shell:startup仅用户登录后运行,适合桌面应用;任务计划程序可实现开机即启或延迟启动,最可靠;注册表Run键隐蔽但易出错;Python脚本需指定解释器绝对路径。

Windows 下让程序开机自动启动,不是只有一种“标准答案”,而是取决于你想要的效果:是登录后立刻运行?还是系统一上电就跑?是否需要管理员权限?会不会被杀毒软件拦截?选错方法,轻则不生效,重则触发UAC弹窗或被系统静默禁用。
用 shell:startup 文件夹最简单,但只在用户登录后触发
这是微软官方推荐给普通用户的方案,路径明确、无需权限、删了就停,适合微信、钉钉、OneDrive 这类桌面应用。
- 按
Win + R,输入shell:startup回车,打开当前用户的启动文件夹(实际路径类似C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup) - 不要直接拖 .exe 文件进去——系统会拒绝执行;必须放快捷方式:右键目标程序 → “发送到” → “桌面快捷方式”,再把快捷方式复制进该文件夹
- 如果希望对所有用户生效(比如工控机多账户场景),改输
shell:common startup,但需以管理员身份操作 - 注意:该方式依赖 Windows 资源管理器加载完成,若程序依赖网络或 USB 设备(如相机、PLC 工具),可能因设备尚未就绪而启动失败
用任务计划程序实现“开机即启”和延迟启动
当你要绕过用户登录阶段、或需要等 30 秒再跑程序(比如等网关上线、伺服驱动器上电),任务计划程序 是唯一可靠的选择。
- 打开
任务计划程序→ 右侧点“创建基本任务” → 名称随便填 → 触发器选“当计算机启动时”(不是“当用户登录时”) - 操作选“启动程序”,在“程序或脚本”里填完整路径,例如:
C:\Python39\python.exe;“添加参数”里填脚本路径:D:\scripts\monitor.py - 关键一步:在“常规”选项卡中勾选“不管用户是否登录都要运行”,并勾选“不存储密码”(否则任务会失败);若需更高权限,再勾选“使用最高权限运行”
- 若要延迟执行,不靠
timeout,而是在触发器里点“高级设置” → 勾选“延迟任务时间”,填0000:00:40表示延后 40 秒——这比批处理更稳定,不会因 cmd 窗口被关闭而中断
注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 隐蔽但易出错
这个位置写入的项会在用户登录时由 explorer.exe 主动拉起,不依赖快捷方式、也不显示图标,适合后台服务型工具,但手误写错路径会导致每次登录都弹报错框。
- 按
Win + R→ 输入regedit→ 定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run - 右键右侧空白 → 新建 → 字符串值 → 名字任意(如
MyMonitor)→ 双击编辑,数值数据填绝对路径,例如:"C:\Tools\watcher.exe" -silent(注意带英文引号,含空格路径必须引起来) - 禁止写相对路径、环境变量未展开的路径(如
%APPDATA%\xxx.exe),注册表不解析这些 - 删除时直接删掉该字符串值即可,不用清空整个 Run 键——乱删其他项可能导致系统异常
Python 脚本开机自启必须指定解释器全路径
很多人把 .py 文件直接丢进启动文件夹,结果什么也不发生——Windows 不认识 .py 后缀的可执行性,也不会自动调用 python.exe。
- 查解释器位置:命令行运行
where python,得到类似C:\Users\Alice\AppData\Local\Programs\Python\Python311\python.exe的结果 - 创建快捷方式时,“目标”栏必须写成:
"C:\path\to\python.exe" "D:\script\main.py"(两段都加英文引号) - 如果脚本依赖虚拟环境,不能只写
venv\Scripts\python.exe——路径必须绝对,且确保 venv 目录不在临时位置(如%TEMP%) - 建议脚本开头加日志:用
with open(r"C:\log\start.log", "a") as f: f.write("started at " + str(datetime.now())),方便验证是否真被触发
真正容易被忽略的,是启动时机与资源就绪之间的错位:系统启动 ≠ 网络就绪 ≠ USB 设备枚举完成 ≠ 用户配置加载完毕。无论用哪种方法,如果你的程序一上来就访问某个 IP 或 COM 口,大概率失败——得加重试逻辑,或者老老实实用任务计划程序配延迟触发。











