Код, который выполняется только один раз, папка автозагрузки Python

Привет и спасибо за все ваши ответы. Я пытаюсь написать фрагмент кода Python, который выполняется только один раз (при первой установке программы) и копирует программу в папки запуска Windows.

(C:\Users\ USER \AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)

Это код, который я написал для этого. (Пожалуйста, не судите меня. Я знаю, что это очень дерьмовый код. Но я очень новичок в кодировании. (Это вторая небольшая программа, которую я пытаюсь написать)

import os
import shutil


#get username
user = str(os.getlogin())
user.strip()

file_in = ('C:/Users/')
file_in_2 = ('/Desktop/Py Sandbox/test/program.py')
file_in_com = (file_in + user + file_in_2)

folder_seg_1 = ('C:/Users/')
folder_seg_2 = ('/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup')
#create FolderPath
folder_com = (folder_seg_1 + user + folder_seg_2)

shutil.copy2(file_in_com, folder_com)

Потому что я получил ошибку, что нет такого внутреннего, внешнего, команды, программы или пакетного файла с именем Installer. Я попытался сгенерировать пакетный файл, в котором ничего не было, который выполняется после завершения процесса установки (но ошибка все еще существует).

save_path = 'C:/Windows/assembly/temp'
name_of_file = str("Installer")
completeName = os.path.join(save_path, name_of_file+".bat")
file1 = open(completeName, "w")
file1.close()

Основная идея заключается в том, что есть моя основная программа, вы запускаете ее, она запускает приведенный выше код и копирует себя в папку автозагрузки. Затем код всего установочного файла удаляется из моей основной программы.

import Installer

#run Installer File
os.system('Installer')
os.remove('Installer.py')

Но, может быть, есть кто-то, кто знает ответ на эту проблему. И, как я уже говорил ранее, спасибо за все ваши ответы ‹3.

Кстати, сейчас я использую Python 3.5.


person Cvqe    schedule 18.04.2017    source источник
comment
Вы должны опубликовать сообщение об ошибке с полной трассировкой стека.   -  person juanpa.arrivillaga    schedule 18.04.2017
comment
C:\Users\Main\AppData\Local\Programs\Python\Python35\python.exe C:/Users/Main/Desktop/Py Sandbox/Program/Program.py «Установщик» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.   -  person Cvqe    schedule 18.04.2017


Ответы (2)


Хорошо, ребята, теперь мне наконец удалось решить эту проблему. На самом деле это не так сложно, но вам нужно думать с другой точки зрения. Теперь это код, который я придумал.

import os
import sys
import shutil

# get system boot drive
boot_drive = (os.getenv("SystemDrive"))

# get current Username
user = str(os.getlogin())
user.strip()

# get script path
script_path = (sys.argv[0])


# create FolderPath (Startup Folder)
folder_seg_1 = (boot_drive + '/Users/')
folder_seg_2 = ('/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup')
folder_startup = (folder_seg_1 + user + folder_seg_2)


#check if file exits, if yes copy to Startup Folder
file_name = (ntpath.basename(script_path))
startup_file = (folder_startup + ("/") + file_name)
renamed_file = (folder_startup + ("/") + ("SAMPLE.py"))


# checkfile in Startup Folder
check_path = (os.path.isfile(renamed_file))

if check_path == True:
    pass
else:
    shutil.copy2(script_path, folder_startup)
    os.rename(startup_file, renamed_file)

Этот сценарий получает ваше имя пользователя, ваш загрузочный диск, расположение файла вашего файла, а затем создает все необходимые пути. Как ваша личная папка автозагрузки. Затем он проверяет, есть ли уже файл в папке запуска, если да, он просто ничего не делает и продолжает, если нет, он копирует файл в папку запуска, а затем переименовывает его (вы можете использовать это, если хотите, но вы не нужно).

person Cvqe    schedule 26.04.2017

Нет необходимости делать os.getenv("SystemDrive") или os.getlogin(), потому что os.getenv("AppData") уже получает оба. Итак, самый прямой способ сделать это, о котором я знаю, таков:

path = os.path.join(os.getenv("appdata"),"Microsoft","Windows","Start Menu","Programs","Startup")
person Ariel Montes    schedule 09.03.2021