¿Cómo obligo a mi aplicación .NET a ejecutarse como administrador?

Una vez que mi progtwig está instalado en una máquina cliente, ¿cómo obligo a mi progtwig a ejecutarse como administrador en Windows 7?

Deseará modificar el manifiesto que se incrusta en el progtwig. Esto funciona en Visual Studio 2008 y versiones posteriores: Proyecto + Agregar nuevo elemento, seleccione “Archivo de manifiesto de la aplicación”. Cambie el elemento a:

   

El usuario recibe el aviso de UAC cuando inicia el progtwig. Usar sabiamente su paciencia puede desgastarse rápidamente.

Agregar un elemento requestedExecutionLevel a su manifiesto es solo la mitad de la batalla; debes recordar que el UAC se puede desactivar. Si es así, debe realizar el control de la forma de la vieja escuela y mostrar un cuadro de diálogo de error si el usuario no es administrador.
(llame a IsInRole(WindowsBuiltInRole.Administrator) en CurrentPrincipal su hilo).

Implementé un código para hacerlo manualmente:

 using System.Security.Principal; public bool IsUserAdministrator() { bool isAdmin; try { WindowsIdentity user = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(user); isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator); } catch (UnauthorizedAccessException ex) { isAdmin = false; } catch (Exception ex) { isAdmin = false; } return isAdmin; } 

Puede incrustar un archivo de manifiesto en el archivo EXE, lo que hará que Windows (7 o superior) ejecute siempre el progtwig como administrador.

Puede encontrar más detalles en el Paso 6: Crear e Insertar un Manifiesto de Aplicación (UAC) (MSDN).

Los pasos detallados son los siguientes.

  1. Agregar archivo de manifiesto de aplicación a la solución
  2. Cambiar la configuración de la aplicación a “app.manifest”
  3. Actualice la etiqueta de “requestedExecutionLevel” para requerirAdministrator.

Agregar archivo en solución

Seleccionar archivo de manifiesto de la aplicación

Seleccione la opción Manifiesto

Actualizar el archivo Manifiesto

Tenga en cuenta que al usar este código, debe desactivar la configuración de seguridad de ClickOnce, para ello, vaya a Propiedades -> Seguridad -> ClickOnce Security

Mientras trabajas en Visual Studio 2008, haz clic con el botón derecho en Project -> Add New Item y selecciona Application Manifest File .

En el archivo de manifiesto, encontrará la etiqueta requestedExecutionLevel , y puede establecer el nivel en tres valores:

O

O

Para configurar su aplicación para que se ejecute como administrador, debe elegir la del medio.

En Visual Studio 2010, haga clic derecho en el nombre de su proyecto. Pulse “Ver configuración de Windows”, esto genera y abre un archivo llamado “app.manifest”. Dentro de este archivo, reemplace “asInvoker” con “requireAdministrator” como se explica en las secciones comentadas dentro del archivo.

Según

  

deseará agregar un manifiesto de aplicación si todavía no tiene uno o no sabe cómo agregar uno. Como algunos proyectos no agregan automáticamente un archivo de manifiesto por separado, primero vaya a las propiedades del proyecto, vaya a la pestaña Aplicación y verifique para asegurarse de que su proyecto no excluye el manifiesto en la parte inferior del grifo.

  • A continuación, haz clic derecho en el proyecto
  • Agregar ítem nuevo
  • Por último, busque y haga clic en Archivo de manifiesto de la aplicación

Otra forma de hacerlo, solo en código, es detectar si el proceso se está ejecutando como admin en la respuesta de @NG. . Y luego abra la aplicación nuevamente y cierre la actual.

Uso este código cuando una aplicación solo necesita privilegios de administrador cuando se ejecuta bajo ciertas condiciones, como cuando se instala como un servicio. Por lo tanto, no es necesario que se ejecute como administrador todo el tiempo, como las demás respuestas lo fuerzan también.

Tenga en cuenta que en el siguiente código NeedsToRunAsAdmin es un método que detecta si en las condiciones actuales se requieren privilegios de administrador. Si esto devuelve false el código no se elevará solo. Esta es una gran ventaja de este enfoque sobre los demás.

Aunque este código tiene las ventajas indicadas anteriormente, sí necesita relanzarse como un nuevo proceso que no siempre es el que usted desea.

 private static void Main(string[] args) { if (NeedsToRunAsAdmin() && !IsRunAsAdmin()) { ProcessStartInfo proc = new ProcessStartInfo(); proc.UseShellExecute = true; proc.WorkingDirectory = Environment.CurrentDirectory; proc.FileName = Assembly.GetEntryAssembly().CodeBase; foreach (string arg in args) { proc.Arguments += String.Format("\"{0}\" ", arg); } proc.Verb = "runas"; try { Process.Start(proc); } catch { Console.WriteLine("This application requires elevated credentials in order to operate correctly!"); } } else { //Normal program logic... } } private static bool IsRunAsAdmin() { WindowsIdentity id = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(id); return principal.IsInRole(WindowsBuiltInRole.Administrator); } 

esta es una versión simplificada de esta respuesta

 public bool IsUserAdministrator() { try { WindowsIdentity user = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(user); return principal.IsInRole(WindowsBuiltInRole.Administrator); } catch (Exception) { return false; } } 

Puede crear el manifiesto usando la configuración de seguridad de ClickOnce y luego deshabilitarlo:

 Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings 

Después de hacer clic en él, se creará un archivo en la carpeta de propiedades del proyecto llamada app.manifest una vez que se haya creado, puede desmarcar la opción Enable ClickOnce Security Settings

Abra ese archivo y cambie esta línea:

  

a:

   

Esto hará que el progtwig requiera privilegios de administrador.

Haga clic con el botón derecho en su ejecutable, vaya a Propiedades> Compatibilidad y marque la casilla ‘Ejecutar este progtwig como administrador’.

Si desea ejecutarlo como administrador para todos los usuarios, haga lo mismo en ‘configuración de cambio para todos los usuarios’.