1.序

当计算机开机时,程序自动运行的方法。

2.windwos修改注册表

import winreg
import os
def add_to_registry():
# 修改注册表项
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Run', 0, winreg.KEY_SET_VALUE)
winreg.SetValueEx(key, 'MyProgram', 0, winreg.REG_SZ, os.path.abspath(__file__))
winreg.CloseKey(key)
add_to_registry()

使用winreg模块来打开注册表项,并将程序的路径添加到HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun键的值中。这样,程序就会在用户登录时自动启动。

注意:使用该方法需要管理员权限。

windows修改注册表综合

以下案例,自动获得程序文件名(支持改名),并写入注册表中实现自启动,与删除自启动。

import sys
import os
import winreg
def add_to_startup(name,file_path=""):
    if file_path == "":
        file_path = os.path.realpath(sys.argv[0])
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run",winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS|winreg.KEY_WRITE|winreg.KEY_CREATE_SUB_KEY)
    winreg.SetValueEx(key, name, 0, winreg.REG_SZ, file_path)
    winreg.CloseKey(key)


def remove_from_startup(name):
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Run", winreg.KEY_SET_VALUE, winreg.KEY_ALL_ACCESS|winreg.KEY_WRITE|winreg.KEY_CREATE_SUB_KEY)
    try:
        winreg.DeleteValue(key, name)
    except FileNotFoundError:
        print(f"{name} not found in startup.")
    else:
        print(f"{name} removed from startup.")
    winreg.CloseKey(key)

3.Linux系统

创建了一个名为my_program.service的系统服务文件,并指定了程序的启动命令、工作目录、用户等信息。然后,使用systemctl命令来启用并启动该系统服务。

import os
def create_service():
# 创建系统服务文件
service_file = '/etc/systemd/system/my_program.service'
with open(service_file, 'w') as f:
f.write('''[Unit]
Description=My Program
After=network.target

[Service]
ExecStart={}/my_program.py
WorkingDirectory={}
User=root
Restart=always

[Install]
WantedBy=multi-user.target'''.format(os.getcwd(), os.getcwd()))

# 启用并启动系统服务
os.system('systemctl daemon-reload')
os.system('systemctl enable my_program.service')
os.system('systemctl start my_program.service')

create_service()