Python 3.11.0
Windows 11 x64
Я написал внешний модуль “autorun.py”. Вот его код:
import winreg from winreg import * import psutil from tkinter import messagebox import sys error = 0 proc_path = '' proc_name = '' count_proc = 0 def autorun(no_dub = 0): global error global proc_path global proc_name global count_proc autorun = winreg.OpenKeyEx(HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Run', 0, KEY_ALL_ACCESS) proc = psutil.Process() try: proc_path = proc.exe() except: error = 1 try: proc_name = proc.name() except: error = 2 if no_dub == 1: for proc in psutil.process_iter(): if proc.name() == proc_name: count_proc += 1 elif no_dub == 0: pass else: messagebox.showinfo("Autorun_error", '"dub" param unrecognized!') return error, no_dub, count_proc, proc_name if proc_name != 'pythonw.exe': if proc_path != '': winreg.SetValueEx(autorun, proc_name, 0, REG_SZ, proc_path) else: if error == 1: messagebox.showinfo("Autorun_error", "Can't detect EXE path") elif error == 2: messagebox.showinfo("Autorun_error", "Can't detect EXE name") if count_proc > 1: try: # try - это на случай, если прога консольная, без tkinter GUI root.destroy() except: pass sys.exit()
from autorun import autorun autorun(no_dub = 1)
error - код ошибки
no_dub - параметр no_dub
count_proc - количество найденных одноименных процессов
proc_name - имя своего процесса
Запускал я программу “Processes.py”, скомпилированную в “ехе” “pyinstaller”ом.
Чтобы выйти из положения, мне пришлось тогда из основной программы “Processes.py” вызывать этот внешний модуль вот с такой проверкой:
if autorun(no_dub = 1)[2] > 2: root.destroy() sys.exit()
Так все работает. Но остаются вопросы!
1) А как все же заставить именно внешний модуль “autorun.py” выполнять эти функции выхода? Почему он их не выполняет?
2) А почему при запуске скомпилированного в “ехе” “Processes.py” у меня в процессах повисает сразу 2 экземпляра “Processes.ехе”? Дочерних окон у меня в программе не используется. Как так? Там получается, что отдельный процесс на tkinter GUI чтоль идет? Или на что-то еще?
Заранее БОЛЬШО-О-О-ОЕ СПАСИБО за помощь и ответ! 😌