автозапуск программы python

есть программа, скомпилированная далее в .exe файл

пытаюсь сделать так, чтобы если оно было активно, то при перезапуске пк, автоматически открывалось

придумал такой вариант:

программа стартанула, записала себя в автозапуск, перед "нормальным" завершением работы программы она удалила себя из автозапуска.

как сделать так, чтобы программа сама себя добавила в автозапуск и при нормальном завершении удалила себя оттуда?

код программы:

import tkinter
master = tkinter.Tk()
canvas = tkinter.Canvas(master, bg='blue', height=300, width=600)
canvas.pack()
master.mainloop()

Ответы (2 шт):

Автор решения: n1tr0xs

Например так:

import sys
import os
import tkinter

path = sys.argv[0]
file_name = path.split('\\')[-1]
startup_path = '"%Appdata%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\"'

os.system(f'copy {path} {startup_path}') # копируем себя

root = tkinter.Tk()
root.mainloop()

os.system(f'del {startup_path+file_name}') # удаляем себя
→ Ссылка
Автор решения: Sonter

Вот удобная функция:

import os
import winshell
from win32com.client import Dispatch


def make_shortcut(name, target, path_to_save, w_dir='default', icon='default'):
    print('make_shortcut')
    if path_to_save == 'desktop':
        '''Saving on desktop'''
        # Соединяем пути, с учётом разных операционок.
        path = os.path.join(winshell.desktop(), str(name) + '.lnk')
    elif path_to_save == 'startup':
        '''Adding to startup (windows)'''
        user = os.path.expanduser('~')
        path_to_save = os.path.join(r"%s/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/" % user,
                                    str(name) + '.lnk')
    else:
        path_to_save = os.path.join(path_to_save, str(name) + '.lnk')
    if icon == 'default':
        icon = target
    if w_dir == 'default':
        w_dir = os.path.dirname(target)
    # С помощью метода Dispatch, объявляем работу с Wscript
    # (работа с ярлыками, реестром и прочей системной информацией в windows)
    shell = Dispatch('WScript.Shell')
    # Создаём ярлык.
    shortcut = shell.CreateShortCut(path_to_save)
    # Путь к файлу, к которому делаем ярлык.
    shortcut.Targetpath = target
    # Путь к рабочей папке.
    shortcut.WorkingDirectory = w_dir
    # Используем иконку.
    shortcut.IconLocation = icon
    # Cохраняем ярлык.
    shortcut.save()
    
→ Ссылка