En Windows XP los administradores no tienen ningún problema para ejecutar un instalador, modificar el registro, o crear carpetas en las areas protegidas por el sistema, pero en Windows 7, un administrador no tiene el acceso total.
Sin embargo, es posible establecer los privilegios de una aplicación desde su ensamblado para que ésta exija estos privilegios al sistema al ejecutarse, marcando privilegios en el manifiesto de la aplicación. Cuando se crea un nuevo proceso, el servicio de información de aplicaciones (AIS) inspecciona el manifiesto de la aplicación que está incrustado en los recursos de la aplicación. Esto prevalece sobre cualquier otro tipo de marcado de aplicaciones, incluido el marcado de compatibilidad de una aplicación o la detección del instalador de UAC (User Access Control). El manifiesto define un nivel de ejecución que indica a Windows los privilegios necesarios para ejecutar el archivo binario. El marcado del manifiesto de aplicación es relevante sólo para archivos EXE, no DLL, UAC no inspecciona archivos DLL durante la creación del proceso.
Las tres posibilidades de nivel de ejecución son:
- asInvoker: la aplicacion obtiene los privilegios de aquel usuario o proceso que lo ejecutó (esta configuracion es la que se establece por defecto en cualquier proyecto nuevo).
- highestAvailable: la aplicacion exije los privilegios mas altos posibles de acuerdo al usuario que ejecutó el programa.
- requireAdministrator: establece que el proceso se debe crear con un token de usuario que sea miembro del grupo administradores. Si el usuario que intentó crear este proceso no es administrador, se mostrará un cuadro de diálogo para que proporcione sus credenciales.
NotePad.exe
). Con la ventana de comandos abierta ejecutamos lo siguiente:
Notepad myapp.exeUna vez dentro pulsamos las teclas de búsqueda "Ctrl+B". Nos aparecerá la ventana de búsqueda de texto y tecleamos "assembly" (sin comillas), Pulsamos <Intro>. Y acto seguido nos localizará el archivo manifest que tiene nuestra aplicación incrustado. Tal y como se muestra en la siguiente figura.
Como se podrá comprobar, se "ve" perfectamente el archivo manifest que tiene incrustada nuestra aplicación. Con las funciones propias de copiar y pegar podemos extraer el contenido, y analizar el archivo.
<assemblyIdentity type="win32" name="myapp" version="1.0.0.0" processorArchitecture="*"/> <description>myapp - VFPX</description> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="AsInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/> </dependentAssembly> </dependency> </assembly>
Se puede ver en negrita el privilegio actual que posee nuestra aplicación.
Podemos cambiar el privilegio, por algunos de los tres modos mencionados anteriormente: asInvoker, highestAvailable, requireAdministrator.
Guardamos el archivo como un archivo de texto con el nombre de nuestra aplicación : myapp+exe+manifest. En el mismo directorio donde ya se ubica nuestro ejecutable.
myapp.exe.manifestAhora vamos a incluir el archivo manifest dentro de nuestro ejecutable. Para eso primero compilamos nuestro proyecto dentro del Fox y con una pequeña utilidad de Microsoft, incluida dentro del Windows SDK MT.EXE (http://msdn.microsoft.com/en-us/library/aa375649%28v=vs.85%29.aspx).
Incrustaremos nuestro archivo manifest. Siempre desde la línea de comandos. También se puede generar un archivo .BAT para que nos automatice todo el proceso. La instrucción quedaría de la siguiente manera.
MT -manifest myapp.exe.manifest -outputresource:myapp.exe;1Así de sencillo y fácil se pueden incluir archivos manifest en nuestros ejecutables. Y con los privilegios que nos sean necesarios en cada situación. Yo por ejemplo utilizo un ejecutable para actualizar mis programas a través de Internet y por supuesto tiene los privilegios de Administrador (requireAdministrator). Así se pueden registrar OCX, acceder al registro del sistema etc. Etc.
Se puede descargar el MT.EXE desde aquí: http://dl.dropbox.com/u/10421838/mt.exe
Antonio L. Montagut ( www.ontarioxb.es )
Enlaces de Interés:
http://blogs.msdn.com/b/calvin_hsia/archive/2007/04/13/add-a-manifest-to-control-your-application-vista-uac-behavior.aspx
http://msdn.microsoft.com/en-us/library/aa375649%28v=vs.85%29.aspx
http://es.wikipedia.org/wiki/Control_de_cuentas_de_usuario
http://en.wikipedia.org/wiki/User_Account_Control
Dame acceso al archivo mt me sale que no tengo permisos
ResponderBorrarMuy buena información logre agregar el manifiesto al Exe y superado el UAC, (El MT.EXE lo pueden descargar desde github)
ResponderBorrarhttps://github.com/eladkarako/mt