Foro de elhacker.net

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
  1. import os, sys
  2. if os.geteuid() != 0:
  3.   print("Needs root privileges")
  4.   sys.exit()
  5. #code
  6.  
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
  1. #-*- coding: utf - 8 -*-
  2. import getpass,ctypes
  3. usuario = getpass.getuser()
  4. if ctypes.windll.shell32.IsUserAnAdmin() != 0:
  5.    print("necesita permisos de administrador")
  6. else:
  7.    print(usuario,"es administrador")
  8.  


Título: Re: Saber si el script se ejecuto como administrador [Windows] | Python3
Publicado por: Drakaris en 22 Septiembre 2020, 00:48 am
hola:
        seguramente hay muchas formas de hacerlo, una de ellas:
Código
  1. #-*- coding: utf - 8 -*-
  2. import getpass,ctypes
  3. usuario = getpass.getuser()
  4. if ctypes.windll.shell32.IsUserAnAdmin() != 0:
  5.    print("necesita permisos de administrador")
  6. else:
  7.    print(usuario,"es administrador")
  8.  

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
  1. #-*- coding: utf - 8 -*-
  2. import getpass,ctypes
  3. usuario = getpass.getuser()
  4. if ctypes.windll.shell32.IsUserAnAdmin() != 1:
  5.    print("necesita permisos de administrador")
  6.    sys.exit()
  7.  

Gracias!