el Guille, la Web del Visual Basic, C#, .NET y más...

Saber si la aplicación se está ejecutando como administrador (2)

 
Publicado el 02/Ago/2007
Actualizado el 22/Sep/2007
Autor: Guillermo 'guille' Som

Aquí tienes otra forma de averiguar si la aplicación se está ejecutando como administrador

22/Sep/07: Y aquí tienes otra forma más, también usando solo clases de .NET, pero más simple


Otra forma de saber si nuestra aplicación se está ejecutando como administrador, y en caso de Windows Vista saber cuando se ejecute usando 'As Administrator'. En este caso, solo para Visual Basic 2005.



 

Introducción:

Pues eso... otra forma de saber si la aplicación se está ejecutando como administrador. En realidad si se está ejecutando con "privilegios" de administrador.

En esta ocasión el código es solo para Visual Basic 2005, ya que se usa el objeto My.User, que en C# se puede simular fácilmente, pero hoy no me he entretenido en buscar la equivalencia... je, je

Parte de este código me lo ha proporcionado Adam Braden (del VB Team), pero solo informaba si el usuario está en el grupo de administradores y se está ejecutando como administrador:

Dim esAdmin As Boolean = My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator)

Por ejemplo, si ese código se ejecuta en un Windows XP y el usuario es administrador, devolverá True. Pero si se ejecuta en un Windows Vista, siempre devolverá False, aunque la aplicación se ejecute "como administrador".
Bueno, esto último, suponiendo que estamos usando el Windows Vista como "viene de fábrica", es decir, con el "UAC" conectado, que es la forma normal de Vista.

 

Y ya puestos... pues me puse a "probar" cosas y al final, añadiendo una línea más de código, funciona como el código anterior (el que publiqué ayer).

Por tanto, creando una función como esta, nos avisará si estamos ejecutando la aplicación como administrador o no, y lo he probado tanto en Windows Vista como XP y va bien.

Private Function EsAdministrador() As Boolean
    My.User.InitializeWithWindowsUser()

    Return My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator)
End Function

 

Que es equivalente a esto otro (por si alguien lo quiere convertir a C#):

Private Function EsAdministrador() As Boolean
    System.Threading.Thread.GetDomain().SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)

    Return My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator)
End Function

 

Espero que te sea de utilidad.

Nos vemos.
Guillermo

Nota 22/Sep/07:
Aquí tienes la función EsAdministrador usando código con solo las clases de .NET Framework 2.0.
El código está tanto para Visual Basic como para C#.

 


Espacios de nombres usados en el código de este artículo:

System.Security.Principal
System.Threading
 



 


La fecha/hora en el servidor es: 23/12/2024 3:28:38

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024