Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: Drakaris en 21 Septiembre 2020, 20:34 PM

Título: Saber si el script se ejecuto como administrador [Windows] | Python3
Publicado por: Drakaris en 21 Septiembre 2020, 20:34 PM
Buenas, estoy haciendo un script de instalación con python y quiero obligar al usuario a que lo ejecute como administrador. Eso en entorno GNU/Linux, se hace con la funcion os.geteuid().
Código (python) [Seleccionar]

import os, sys
if os.geteuid() != 0:
   print("Needs root privileges")
   sys.exit()
#code

pero como se puede hacer con Windows?

Hay alguna manera de obtener los datos del usuario actual? por que se puede obtener el nombre del usuario con el que estoy corriendo el script.

Gracias de antemano
Título: Re: Saber si el script se ejecuto como administrador [Windows] | Python3
Publicado por: tincopasan en 21 Septiembre 2020, 21:21 PM
hola:
        seguramente hay muchas formas de hacerlo, una de ellas:
Código (python) [Seleccionar]
#-*- coding: utf - 8 -*-
import getpass,ctypes
usuario = getpass.getuser()
if ctypes.windll.shell32.IsUserAnAdmin() != 0:
    print("necesita permisos de administrador")
else:
    print(usuario,"es administrador")
   
Título: Re: Saber si el script se ejecuto como administrador [Windows] | Python3
Publicado por: Drakaris en 22 Septiembre 2020, 00:48 AM
Cita de: tincopasan en 21 Septiembre 2020, 21:21 PM
hola:
        seguramente hay muchas formas de hacerlo, una de ellas:
Código (python) [Seleccionar]
#-*- coding: utf - 8 -*-
import getpass,ctypes
usuario = getpass.getuser()
if ctypes.windll.shell32.IsUserAnAdmin() != 0:
    print("necesita permisos de administrador")
else:
    print(usuario,"es administrador")
   


Modifique un poco el código, en la consola cmd como administrador la funcion ctypes.windll.shell32.IsUserAnAdmin() me arrojaba 1 mientras que, cuando lo ejecutaba con una consola (sin "run as administrador") me arrojaba 0, por la cual hice:
Código (python) [Seleccionar]

#-*- coding: utf - 8 -*-
import getpass,ctypes
usuario = getpass.getuser()
if ctypes.windll.shell32.IsUserAnAdmin() != 1:
    print("necesita permisos de administrador")
    sys.exit()


Gracias!