프로그램/python

[파이썬] 관리자 모드로 외부 프로그램 실행하기 GUI

더월드 2023. 12. 16.

GUI 환경에서 외부 프로그램 실행하기 예제 코드입니다.

import tkinter as tk
from tkinter import filedialog, messagebox
import subprocess
import ctypes
import sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

def run_as_admin():
    if is_admin():
        # 이미 관리자 권한으로 실행 중이라면 아무것도 하지 않음
        return True
    else:
        # 관리자 권한으로 다시 실행
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
        return False

def execute_program():
    program_name = program_entry.get()
    options = options_entry.get()
    
    if not program_name:
        messagebox.showerror("에러", "프로그램명을 입력하세요.")
        return

    if runas_var.get() == 1:
        # 관리자 모드로 실행
        if not is_admin():
            result = messagebox.askyesno("확인", "프로그램을 관리자 모드로 실행하시겠습니까?")
            if result:
                run_as_admin()
            else:
                return

        program_command = f'runas /user:Administrator "{program_name} {options}"'
    else:
        # 관리자 모드로 실행하지 않음
        program_command = f'"{program_name}" {options}'

    try:
        subprocess.run(program_command, shell=True)
    except Exception as e:
        messagebox.showerror("에러", f"프로그램 실행 중 오류 발생:\n{e}")

if __name__ == '__main__':
    # 윈도우 생성
    window = tk.Tk()
    window.title("외부 프로그램 실행 GUI")
    
    # 프로그램명 입력
    program_label = tk.Label(window, text="프로그램명:")
    program_label.grid(row=0, column=0, padx=10, pady=10, sticky=tk.E)
    
    program_entry = tk.Entry(window, width=50)
    program_entry.grid(row=0, column=1, padx=10, pady=10)
    
    # 옵션 입력
    options_label = tk.Label(window, text="옵션:")
    options_label.grid(row=1, column=0, padx=10, pady=10, sticky=tk.E)
    
    options_entry = tk.Entry(window, width=50)
    options_entry.grid(row=1, column=1, padx=10, pady=10)
    
    # 체크박스: 관리자 모드로 실행
    runas_var = tk.IntVar()
    runas_checkbox = tk.Checkbutton(window, text="관리자 모드로 실행", variable=runas_var)
    runas_checkbox.grid(row=2, column=0, columnspan=2, padx=10, pady=5, sticky=tk.W)
    
    # 실행 버튼
    execute_button = tk.Button(window, text="실행하기", command=execute_program)
    execute_button.grid(row=3, column=0, columnspan=2, pady=10)
    
    # GUI 실행
    window.mainloop()

댓글

💲 추천 글