Cómo hacer que una aplicación .NET siempre se ejecute como administrador: Guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Cómo hacer que una aplicación .NET siempre se ejecute como administrador? (Y no volverse loco)



¡Hola, colega! Si alguna vez has escrito una utilidad para trabajar con el registro, instalar servicios de Windows o simplemente intentaste guardar un archivo en C:\\Program Files, seguramente te has encontrado con esto: la aplicación falla con el error "Access Denied", el usuario se encoge de hombros y tú te rascas la cabeza. ¿Te suena familiar? ¡Bienvenido al mundo del UAC (Control de Cuentas de Usuario) y la eterna lucha por los permisos de administrador.



Hoy analizaremos la pregunta más popular en Stack Overflow (sí, esa misma, con miles de visitas): "How do I force my .NET application to run as administrator?". No solo copiaremos la respuesta, entenderemos cómo funciona y escribiremos un código limpio en C#. ¡Allá vamos!



¿Por qué no se puede simplemente? La magia del UAC



Windows, desde Vista, no confía en las aplicaciones por defecto. Incluso si has iniciado sesión como "Administrador", tu proceso obtiene un token con permisos filtrados. Esto se hace por seguridad: para que un virus no pueda simplemente sobrescribir archivos del sistema.



Cuando ejecutas un .exe, el sistema revisa su manifiesto. Si no tiene una marca especial, la aplicación se ejecuta con permisos de usuario normal. Nuestra tarea es agregar esa marca.



Método 1: Agregar el manifiesto (la forma correcta para .NET Framework)



Esta es la forma estándar y más sencilla para aplicaciones clásicas de Windows Forms o WPF en .NET Framework.



Paso 1: Crear o editar el archivo app.manifest



En Visual Studio, haz clic derecho en el proyecto → Add → New Item → Application Manifest File. Si el archivo ya existe (por ejemplo, app.manifest), simplemente ábrelo.



Verás un XML con muchos comentarios. La sección que nos interesa es requestedExecutionLevel. Ajústala de la siguiente manera:



<?xml version="1.0" encoding="utf-8"?><assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">    <security>      <requestedPrivileges>        <!-- IMPORTANTE: Esta es la línea clave -->        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />      </requestedPrivileges>    </security>  </trustInfo></assembly>


Observa el level="requireAdministrator". Hay otros dos valores:

  • asInvoker — ejecución con los permisos del proceso padre (por defecto).
  • highestAvailable — ejecución con los permisos máximos disponibles para el usuario actual.


Paso 2: Vincular el manifiesto con el proyecto (si no funciona automáticamente)



Abre las propiedades del proyecto (clic derecho en el proyecto → Properties). En la pestaña Application, busca la sección Resources y en la lista desplegable "Manifest" selecciona "app.manifest".



¡Listo! Ahora, al ejecutar tu .exe, Windows mostrará inmediatamente la ventana de UAC: "¿Permitir que esta aplicación realice cambios en tu dispositivo?". Si el usuario hace clic en "Sí", la aplicación obtendrá permisos completos de administrador.



Método 2: Reinicio programático con elevación (para .NET Core / .NET 5+)



Este método es universal y funciona incluso en .NET Core, .NET 5/6/7/8 y .NET Framework. A veces el manifiesto no es adecuado porque:

  • Quieres que la aplicación se ejecute sin permisos, pero algunas funciones requieran elevación.
  • Estás usando una aplicación de consola o un servicio.


La idea es simple: la aplicación verifica si tiene permisos. Si no los tiene, se vuelve a ejecutar a sí misma, pero con el argumento runas (de

Blogs

Book Recommendations