¿Cómo puedo forzar my.NET aplicación para ejecutar como administrador?


Una vez que mi programa está instalado en un equipo cliente, ¿cómo fuerzo mi programa a ejecutarse como administrador en Windows 7?

Author: Daniel B, 2010-05-12

12 answers

Querrá modificar el manifiesto que se inserta en el programa. Esto funciona en Visual Studio 2008 y versiones posteriores: Proyecto + Añadir nuevo elemento, seleccione "Archivo de manifiesto de la aplicación". Cambie el elemento <requestedExecutionLevel> a:

 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

El usuario recibe el mensaje UAC cuando inicia el programa. Úsalo sabiamente; su paciencia puede agotarse rápidamente.

 972
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-18 14:23:32

Agregar un elemento requestedExecutionLevela tu manifiesto es solo la mitad de la batalla; debes recordar que UAC se puede desactivar. Si lo es, tiene que realizar la comprobación de la manera de la vieja escuela y poner un cuadro de diálogo de error si el usuario no es administrador
(llamar IsInRole(WindowsBuiltInRole.Administrator) en tu hilo CurrentPrincipal).

 133
Author: Anders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-30 14:51:04

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;
}
 48
Author: NG.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-05 16:30:58

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

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

 39
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-05 16:30:14

Los pasos detallados son los siguientes.

  1. Agregar el archivo de manifiesto de la aplicación a la solución
  2. Cambie la configuración de la aplicación a " app.manifiesto"
  3. Actualizar la etiqueta de "requestedExecutionLevel" a Requiredadministrator.

Agregar archivo en la solución

Seleccionar Archivo de Manifiesto de la Aplicación

Seleccione la opción de manifiesto

Actualizar archivo de manifiesto

Tenga en cuenta que el uso de este código que necesita para desactivar la configuración de seguridad de ClickOnce, para hacer esto, ir dentro de Propiedades - > Seguridad - > ClickOnce Seguridad

 35
Author: Hassan Rahman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-15 12:06:09

Mientras trabaja en Visual Studio 2008, haga clic derecho en Project -> Add New Item y luego elija Application Manifest File.

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

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

O

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

O

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

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

 14
Author: Rashad Maqsood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-05 16:32:13

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 " aplicación.manifestar". Dentro de este archivo reemplace " asInvoker "por" requireAdministrator " como se explica en las secciones comentadas dentro del archivo.

 10
Author: Evolved,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-07 15:19:27

Según

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

Querrá agregar un manifiesto de aplicación si aún no tiene uno o no sabe cómo agregar uno. Como algunos proyectos no agregan automáticamente un archivo de manifiesto separado, primero vaya a propiedades del proyecto, vaya a la pestaña Aplicación y verifique que su proyecto no excluya el manifiesto en la parte inferior del toque.

  • A continuación, haga clic derecho en proyecto
  • Añádase un nuevo elemento
  • Por último, busque y haga clic en Manifiesto de aplicación File
 10
Author: Justin Mcconnell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-05 16:34:12

Otra forma de hacer esto, solo en código, es detectar si el proceso se está ejecutando como administrador como 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 otras respuestas también lo obligan.

Nota 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á. Esta es una gran ventaja de este enfoque sobre los demás.

Aunque este código tiene las ventajas mencionadas anteriormente, necesita relanzarse como un nuevo proceso que no siempre es lo que 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);
}
 5
Author: TheLethalCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:48

Esta es la versión simplificada de la respuesta

public bool IsUserAdministrator()
{
    try
    {
        WindowsIdentity user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (Exception)
    {
        return false;
    }
}
 3
Author: Hakam Fostok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-05 07:42:52

Puede crear el manifiesto utilizando 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 creado, puede desmarcar la opción Enable ClickOnce Security Settings

Abra ese archivo y cambie esta línea :

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

A:

 <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

Esto hará que el programa requiera privilegios de administrador.

 2
Author: Yochai Timmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-14 10:19:01

Haga clic derecho en su ejecutable, vaya a Propiedades > Compatibilidad y marque la casilla 'Ejecutar este programa como administrador'.

Si desea ejecutarlo como administrador para todos los usuarios, haga lo mismo en 'cambiar configuración para todos los usuarios'.

 -2
Author: SlickJayD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-27 19:03:29