如何在Windows启动时启动python文件?
- 2025-01-10 08:47:00
- admin 原创
- 99
问题描述:
我有一个 python 文件并且正在运行该文件。
如果 Windows 关闭并重新启动,我如何在每次 Windows 启动时运行该文件?
解决方案 1:
根据脚本执行的操作,您可以:
将其打包成服务,然后安装
将其添加到 Windows 注册表(HKCU\Software\Microsoft\Windows\CurrentVersion\Run)
将其快捷方式添加到开始菜单的启动文件夹中 - 它的位置可能会随着操作系统版本的改变而改变,但安装程序总会有一些指令将快捷方式放入该文件夹中
使用 Windows 的任务计划程序,然后您可以在几种事件上设置任务,包括登录和启动时。
实际解决方案取决于您的需求以及脚本实际执行的操作。
以下是一些差异说明:
解决方案 1 在计算机上启动脚本,而解决方案 2 和 3 在安装脚本的用户登录时启动脚本。
还值得注意的是,#1 总是启动脚本,而#2 和#3 将仅在特定用户上启动脚本(我认为如果您使用默认用户,那么它将在每个人上启动,但我不确定细节)。
解决方案 2 对用户来说更“隐蔽”,而解决方案 3 在禁用自动启动方面给用户留下了更多的控制权。
最后,解决方案#1 需要管理权限,而其他两个可以由任何用户完成。
解决方案 #4 是我最近发现的,非常简单。我注意到的唯一问题是 Python 脚本会导致出现一个小的命令窗口。
正如您所见,这一切都取决于您想要做什么;例如,如果它仅用于您的目的,我只需将其拖到启动文件夹中。
无论如何,最近我倾向于解决方案#4,因为它是最快和最直接的方法。
解决方案 2:
您只需将以下代码添加到脚本即可。不过,这仅适用于 Windows!:
import getpass
import os
USER_NAME = getpass.getuser()
def add_to_startup(file_path=""):
if file_path == "":
file_path = os.path.dirname(os.path.realpath(__file__))
bat_path = r'C:Users%sAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup' % USER_NAME
with open(bat_path + '\\' + "open.bat", "w+") as bat_file:
bat_file.write(r'start "" "%s"' % file_path)
此函数将在启动文件夹中创建一个运行脚本的 bat 文件。
这file_path
是您想要在计算机打开时运行的文件的路径。
您可以将其留空以便将运行脚本添加到启动中。
解决方案 3:
点击Win+R
键入shell:startup
拖放你的 Python 文件
my_script.py
+ 如果你不需要控制台:将扩展名从更改`my_script.py`为`my_script.pyw`
+ 否则:创建`run_my_script.cmd`内容:`python path oyourmy_script.py`
解决方案 4:
在以下启动目录中(至少在 Windows XP 上存在此路径):
C:Documents and SettingsAll UsersStart MenuProgramsStartup
为你的 Python 程序添加一个快捷方式。每次系统启动时它都会被执行。
解决方案 5:
还没有测试过,但我会创建一个包含“python yourfile.py”的批处理文件并将其放在自动启动文件夹中。
在 Windows 7 上,您可以在这里找到它:
%APPDATA%RoamingMicrosoftWindowsStart MenuProgramsStartup
解决方案 6:
您可以将 run_script.cmd 放在
C:Users/usernameAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup
run_script.cmd 的内容
python path oyourscript.py
解决方案 7:
import winreg
def set_autostart_registry(app_name, key_data=None, autostart: bool = True) -> bool:
"""
Create/update/delete Windows autostart registry key
! Windows ONLY
! If the function fails, OSError is raised.
:param app_name: A string containing the name of the application name
:param key_data: A string that specifies the application path.
:param autostart: True - create/update autostart key / False - delete autostart key
:return: True - Success / False - Error, app name dont exist
"""
with winreg.OpenKey(
key=winreg.HKEY_CURRENT_USER,
sub_key=r'SoftwareMicrosoftWindowsCurrentVersionRun',
reserved=0,
access=winreg.KEY_ALL_ACCESS,
) as key:
try:
if autostart:
winreg.SetValueEx(key, app_name, 0, winreg.REG_SZ, key_data)
else:
winreg.DeleteValue(key, app_name)
except OSError:
return False
return True
def check_autostart_registry(value_name):
"""
Check Windows autostart registry status
! Windows ONLY
! If the function fails, OSError is raised.
:param value_name: A string containing the name of the application name
:return: True - Exist / False - Not exist
"""
with winreg.OpenKey(
key=winreg.HKEY_CURRENT_USER,
sub_key=r'SoftwareMicrosoftWindowsCurrentVersionRun',
reserved=0,
access=winreg.KEY_ALL_ACCESS,
) as key:
idx = 0
while idx < 1_000: # Max 1.000 values
try:
key_name, _, _ = winreg.EnumValue(key, idx)
if key_name == value_name:
return True
idx += 1
except OSError:
break
return False
创建自动启动:
set_autostart_registry('App name', r'C: estx.exe')
更新自动启动:
set_autostart_registry('App name', r'C: esty.exe')
删除自动启动:
set_autostart_registry('App name', autostart=False)
检查自动启动:
if check_autostart_registry('App name'):
解决方案 8:
尝试在“HKLM/SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce”中添加一个条目。右键单击 -> 新建 -> 字符串值 -> 添加文件路径
解决方案 9:
创建一个 exe 文件,我使用 pyinstaller“yourCode.py”
将执行文件添加到您的注册表项:
https://cmatskas.com/configure-a-runonce-task-on-windows/
解决方案 10:
上面提到的所有方法都没有用,我都试过了,我会告诉你更简单的解决方案和 Windows 任务计划程序的替代方案
创建一个 .bat 文件,内容为“项目解释器的地址”、“带有脚本名称的 PYTHON 脚本的地址”
将此 bat 文件存储到窗口启动文件夹中(默认隐藏)仅供参考:要找到窗口启动文件夹,请按windos+r,然后输入shell:startup - 它将直接带您进入启动文件夹
将 bat 文件复制到那里,格式与以下 2 个地址相同,然后重新启动系统或关机并启动。
打开后20秒内代码会自动运行。
稍后再感谢我
解决方案 11:
import shutil
from os import path
import getpass
USER_NAME = getpass.getuser()
source_path = "hi.txt"
if path.exists(source_path):
destination_path = "C://Users//%s//AppData//Roaming//Microsoft//Windows//Start Menu//Programs//Startup" % USER_NAME
new_location = shutil.copy(source_path, destination_path)
print("% s перемещен в указанное место,% s" % (source_path , new_location))
print(destination_path)
else :
print ("Файл не существует.")