es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo solicitar elevación UAC dentro de Python?

Mi script de Python requiere privilegios de administrador, sin embargo no parece funcionar. Quiero que pueda solicitar privilegios de administrador pero también funcione cuando el archivo sea compilado con pyinstaller también.

Intenté esto:

ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)

Pero no parece funcionar, solicita el permiso de administrador pero no hace nada con él.
Estoy utilizando la versión 3.9.9 de Python si eso ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para ejecutar un script de Python con privilegios de administrador, puedes utilizar el módulo ctypes en Python. Sin embargo, es posible que el código que proporcionaste no funcione como se espera.

    Aquí hay una forma alternativa de ejecutar un script de Python con privilegios de administrador:

    import os
    import sys
    
    if not sys.argv[-1] == "asadmin":
        # Vuelve a ejecutar el script con privilegios de administrador
        script = os.path.abspath(sys.argv[0])
        params = " ".join([os.path.abspath(p) for p in sys.argv[1:]] + ["asadmin"])
        cmdline = f'"{sys.executable}" "{script}" {params}'
        try:
            # Inicia un nuevo proceso con privilegios de administrador
            ctypes.windll.shell32.ShellExecuteW(None, "runas", cmdline, None, None, 1)
        except Exception as e:
            print("Error:", e)
    else:
        # El script se está ejecutando ahora con privilegios de administrador
        # Agrega tu código que requiere privilegios de administrador aquí
    

    El código anterior verifica si el script ya se está ejecutando con privilegios de administrador. Si no es así, vuelve a iniciar el script con privilegios de administrador utilizando la función ShellExecuteW. Se agrega el parámetro asadmin a los argumentos de la línea de comandos para indicar que el script debe ejecutarse con privilegios de administrador.

    Después de que el script se haya reiniciado con privilegios de administrador, puedes agregar tu código que requiere privilegios de administrador en el bloque else.

    Nota: Es posible que también necesites compilar tu script con la bandera --uac-admin al usar pyinstaller para asegurarte de que se ejecute con privilegios de administrador.

Comments are closed.