Solicitar permisos de administrador en Windows Vista
-
jueves, 31 de diciembre de 2009 9:49
Tengo una aplicación. Esta debe copiar datos a Archivos de programa. Pero en windows vista solo puede con permisos de administrador.
¿Como puedo hacer para que al ejecutarse el programa solicite los permisos?
Lo he visto en otros programas y no se como se hace.
Gracias por responder.
Todas las respuestas
-
jueves, 31 de diciembre de 2009 10:16
Es más sencillo de lo que crees, al menos si te he entendido bien...
Te vas a my project y le das doble click, entras en la pestaña de aplicación y verás un botón que pone "Ver configuración de UAC", pues lo pulsas
Te aparecera un archivo xml de configuración con unas lineas comentadas:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Pues tan solo tienes que descomentar la linea del medio, la de requireAdministrator.
A partir de ahí tu aplicación solicitará los permisos de administrador... o al menos en teoría debería ser así....
Iván Noya Cendal
http://www.seuvella.com
Si la respuesta te ha ayudado, marcala.- Propuesto como respuesta IncaSoft martes, 05 de enero de 2010 16:15
- Marcado como respuesta Rafael FagundesModerator viernes, 29 de enero de 2010 18:47
-
jueves, 31 de diciembre de 2009 14:53No, no es eso. Es k pa copiar el archivo, si no tiene permisos, da error. Entonces quiero que los solicite, esto que ponen:
Tal programa solicita su permiso para continuar.
Eso. Porque si no, le das, y salta error. No se puede acceder a la carpeta taltaltal.
Entiendes¿? -
jueves, 31 de diciembre de 2009 20:58
IncaSoft tiene razon. ese método hace lo que tu deseas pero le hare unas modificaciones.cambia esta linea<requestedExecutionLevel level="asInvoker" uiAccess="false" />
por esta<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
- Propuesto como respuesta emilios1995 jueves, 31 de diciembre de 2009 20:59
- Marcado como respuesta Rafael FagundesModerator viernes, 29 de enero de 2010 18:47
-
viernes, 01 de enero de 2010 11:55A k te refieres? La pongo así:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
O así?
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> -
viernes, 01 de enero de 2010 23:29
Las lineas verdes no las toques son solo comentarios.solo remplaza la linea<requestedExecutionLevel level="asInvoker" uiAccess="false" />
por<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> -
jueves, 14 de enero de 2010 13:45ModeradorHola!
¿Fue posible solucionar su problema?
Saludos!
Rafael Fagundes - Marque la respuesta como correcta si te ha sido de utilidad! -
viernes, 07 de mayo de 2010 0:17
No se como le haya ido a el amigo... Justiciero Misterioso... pero a mi me funciono...
GRACIAS POR EL APORTE
-
jueves, 27 de octubre de 2011 12:08
esta modificación hace que mi aplicacion solicite permisos de administrador para ser ejecutada. sin embargo, cuando voy a copiar un fichero en una carpeta de windows, sigue apareciendo el mensaje de acceso denegado.
tengo una clase para hacer login con usuario y contraseña de administrador, y despues llamo al procedimiento que copia el fichero, pero ni así:
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Runtime.InteropServices
Imports System.Security.PrincipalPublic Class Impersonation
#Region "Consts"
Public Const LOGON32_LOGON_INTERACTIVE As Integer = 2 '9
Public Const LOGON32_PROVIDER_DEFAULT As Integer = 0 '3Dim impersonationContext As WindowsImpersonationContext
Dim username As String
Dim domain As String
Dim password As String#End Region
#Region "Constructors"
Sub New(ByVal _userName As String, ByVal _domain As String, ByVal _password As String)
username = _userName
domain = _domain
password = _password
End Sub#End Region
#Region "External API"
<DllImport("advapi32.dll", SetLastError:=True)>
Public Shared Function LogonUser(ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Integer
End Function<DllImport("advapi32.dll", SetLastError:=True)>
Public Shared Function RevertToSelf() As Boolean
End Function<DllImport("kernel32.dll", SetLastError:=True)>
Public Shared Function CloseHandle(ByVal hObject As IntPtr) As Integer
End Function#End Region
#Region "Methods"
Public Sub PerformImpersonatedTask(ByVal methodToPerform As Action)
Dim token As IntPtr = IntPtr.Zero
If RevertToSelf() Then
If LogonUser(username, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, token) <> 0 Then
Dim identity = New WindowsIdentity(token)
impersonationContext = identity.Impersonate()
If impersonationContext IsNot Nothing Then
methodToPerform.Invoke()
impersonationContext.Undo()
End If
Else
End If
End If
If token <> IntPtr.Zero Then
CloseHandle(token)
End If
End Sub#End Region
End Classestas son las lineas que ejecutan el login y el metodo que copia el fichero:
Dim imp As Impersonation = New Impersonation(user, domain, pwd)
imp.PerformImpersonatedTask(New Action(AddressOf CopyMacros))por ultimo, el metodo que copia el fichero:
Public Sub CopyMacros()
Try
Dim macro = My.Resources.iManO2K_xla
File.WriteAllBytes(rootWORD, macro)
Console.WriteLine("{0} downloaded", macro.ToString)Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub

