You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python生成的.exe仅运行一次即实现Windows开机自启?

实现Python生成的EXE自添加开机启动(无需手动操作)

你的这个想法完全可行!这其实是实现Windows开机自启非常巧妙的轻量方案——让EXE第一次运行时自动给自己创建快捷方式并放进启动文件夹,全程不用用户手动操作,也完全不需要安装向导。

核心逻辑

Windows的开机启动项依赖两个关键文件夹:

  • 当前用户专属启动文件夹:路径为 C:\Users\<你的用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup,这个文件夹不需要管理员权限,只会让当前登录的用户开机启动程序。
  • 所有用户通用启动文件夹:路径为 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup,这个需要管理员权限,所有登录系统的用户都会触发程序启动。

我们的方案就是让EXE在首次运行时,检查对应启动文件夹里是否已有自身的快捷方式,没有的话就自动创建一个。

具体实现步骤

1. 准备依赖库

要在Python中创建Windows快捷方式,需要用到pywin32库,先通过pip安装:

pip install pywin32

2. 编写自启动逻辑代码

下面是完整的示例代码,包含了快捷方式创建、重复检查的逻辑,你可以直接集成到自己的程序里:

import os
import sys
from win32com.client import Dispatch

def setup_autostart():
    # 获取当前程序的路径:打包成EXE后就是EXE自身的路径
    app_path = sys.executable if getattr(sys, 'frozen', False) else sys.argv[0]
    # 获取当前用户的启动文件夹路径
    startup_dir = os.path.join(os.environ['APPDATA'], r'Microsoft\Windows\Start Menu\Programs\Startup')
    # 定义快捷方式的名称和完整路径
    shortcut_name = "MyAutoLaunchApp.lnk"
    shortcut_path = os.path.join(startup_dir, shortcut_name)

    # 检查快捷方式是否已存在,避免重复创建
    if os.path.exists(shortcut_path):
        return

    # 创建快捷方式
    shell = Dispatch('WScript.Shell')
    shortcut = shell.CreateShortCut(shortcut_path)
    shortcut.TargetPath = app_path
    shortcut.WorkingDirectory = os.path.dirname(app_path)  # 设置工作目录为程序所在文件夹
    shortcut.IconLocation = app_path  # 用程序自身的图标,也可以指定.ico文件路径
    shortcut.Save()

# 程序入口
if __name__ == "__main__":
    # 先执行自启动设置
    setup_autostart()
    # 这里写你的原有业务逻辑
    print("程序已运行,且已添加开机自启!")

3. 打包成EXE

用pyinstaller打包时,记得把pywin32的依赖包含进去,示例打包命令:

pyinstaller --onefile --windowed your_main_script.py
  • --onefile:将程序打包成单个独立的EXE文件
  • --windowed:如果是GUI程序,添加这个参数会隐藏控制台窗口(控制台程序可以去掉)

关键注意事项

  • 权限问题:如果要写入所有用户的启动文件夹,必须以管理员身份运行EXE,否则会触发权限错误。你可以在代码里添加权限检测,或者在首次运行时提示用户右键选择“以管理员身份运行”。
  • 重复创建防护:代码里已经加入了快捷方式存在性检查,所以程序每次运行都不会重复创建,只有第一次会添加自启项。
  • 取消自启的方法:用户如果想取消开机自启,只需要打开启动文件夹删除对应的快捷方式即可;你也可以在程序里添加一个“取消开机自启”的功能,通过代码删除那个快捷方式。

内容的提问来源于stack exchange,提问作者Half_Bit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:33:42