¿Cómo puedo obligar a mi .NETO de la aplicación para que se ejecute como administrador?

Una vez que el programa está instalado en un equipo cliente, ¿cómo puedo obligar a mi programa para que se ejecute como administrador en Windows 7?

Además de lo Binario Guerrero escribió, usted podría querer escribir algo de código para probar si tiene privilegios de administrador .. (que es lo que están pidiendo?)
No me gustaría tomar esta tarea a la ligera, sin embargo, usted debe verificar lo que realmente se necesita administrador para ver si puede trabajar alrededor de ella. Ningún cliente va a ser feliz ejecutar una aplicación en modo administrador todo el tiempo. Un montón de grandes clientes ni siquiera considerar la posibilidad de que una aplicación como esa, y si la prueba del logotipo de los asuntos que a usted no le pase como eso.
Alex está muy en su punto. Si es posible, elevar sólo cuando sea necesario, de lo contrario, la Directiva de Grupo, UAC y un número de otras variables que entran en juego. Al menos, con UAC, el usuario tendría que autorizar en cada carrera frente a sólo cuando un usuario específico de la acción que se realiza.

OriginalEl autor Gold | 2010-05-12

12 Kommentare

  1. 991

    Usted querrá modificar el manifiesto que queda incrustada en el programa. Esto funciona en Visual Estudio 2008 y superior: Proyecto + Agregar Nuevo Elemento, seleccione «Archivo de Manifiesto de Aplicación». Cambiar el <requestedExecutionLevel> elemento:

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

    El usuario obtiene el UAC mensaje cuando se inicie el programa. Usar sabiamente; su paciencia puede llevar a cabo rápidamente.

    Si usted recibe un error de ClickOnce al intentar compilar, ver esta respuesta: stackoverflow.com/questions/11023998/…
    Su proyecto tiene que ser configurado para utilizar el manifiesto de la aplicación también – en las Propiedades del Proyecto, seleccione la opción «Aplicación» de la ficha y asegúrese de que el «Manifiesto:» en la sección «Recursos» se establece para su aplicación.manifiesto (o lo que se denomina el .archivo de manifiesto).
    Tuve que volver a cargar el proyecto antes VS iba a preguntar a reiniciar en modo de administrador.
    Sí, UAC puede ser deshabilitado, pero cuando esto es, la aplicación se ejecutará automáticamente como administrador (suponiendo que el usuario tiene privilegios de administrador), porque deshabilitar UAC significa todo lo que se ejecuta en el más alto privilegio que el usuario está permitido. Es como quejarse de que en caso de instalar una fantasía de la cerradura en la puerta, no va a funcionar si la puerta se quita.
    No automáticamente «ejecutar como administrador», que va a ejecutar bajo la normal permisos del usuario (admin si el usuario es admin, o estándar si el usuario es estándar). Apoyándose en este caso en particular, incluso si es el predeterminado, es lo bueno de que los programas de evitar como la peste. Siguiendo tu analogía, la fantasía de bloqueo es lindo y todo, pero adecuadamente en el diseño de software debe anticipar el caso de que el conjunto de la puerta se quita, incluso si es una ocurrencia rara.

    OriginalEl autor Hans Passant

  2. 134

    La adición de un requestedExecutionLevel elemento a su manifiesto es sólo la mitad de la batalla; hay que recordar que UAC se puede desactivar. Si es así, usted tiene que realizar la verificación de la vieja escuela y un diálogo de error si el usuario no es administrador
    (llamada IsInRole(WindowsBuiltInRole.Administrador) en el hilo del CurrentPrincipal).

    Usted podría también utilizar <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> así
    ¿Qué highestAvailable tienen que ver con esto? La pregunta es acerca de cómo forzar admin, highestAvailable es menos restrictiva que requireAdministrator y permitirá a un usuario que no es administrador de inicio de la aplicación de la onu-elevada con ningún mensaje de UAC, sólo los administradores aparecerá…
    Aquí es un MSDN ejemplo de la IsInRole, Anders habla.

    OriginalEl autor Anders

  3. 49

    He implementado el código para hacerlo de forma manual:

    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;
    }
    Esto sólo detecta si el contexto se está ejecutando como Admin no forec que la aplicación se ejecute como Admin lo solicitado por el OP
    Creo que no hay ninguna manera programática para forzar una aplicación para elevar su propia permanentes. Si no fueron, que sería muy del riesgo de seguridad, no?
    A pesar de que su solución es buena, pero la pregunta era diferente. 😉

    OriginalEl autor NG.

  4. 38

    Los pasos detallados como sigue.

    1. Agregar archivo de manifiesto de aplicación a la solución
    2. Cambiar la configuración de la aplicación «app.manifiesto»
    3. Actualización de la etiqueta de «nivel de ejecución solicitado» a requireAdministrator.

    ¿Cómo puedo obligar a mi .NETO de la aplicación para que se ejecute como administrador?

    ¿Cómo puedo obligar a mi .NETO de la aplicación para que se ejecute como administrador?

    ¿Cómo puedo obligar a mi .NETO de la aplicación para que se ejecute como administrador?

    ¿Cómo puedo obligar a mi .NETO de la aplicación para que se ejecute como administrador?

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

    OriginalEl autor Hassan Rahman

  5. 14

    Mientras se trabaja en Visual Estudio 2008, haga clic en Project -> Add New Item y, a continuación, eligió Application Manifest File.

    En el archivo de manifiesto, usted encontrará la etiqueta de requestedExecutionLevel, y usted puede ajustar el nivel de 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, usted tiene que elegir la de en medio.

    Esto funciona. Sin embargo, se hizo un espacio en blanco ventana de cmd aparece cuando se ejecuta el CMD de la aplicación (usando c# cmd aplicación para ejecutar algunos exe en el fondo).

    OriginalEl autor Rashad Maqsood

  6. 10

    En Visual Studio 2010 de la derecha haga clic en el nombre del proyecto.
    Pulse «Ver Configuración de Windows», esto genera y se abre un archivo llamado «de la aplicación.manifiesto».
    Dentro de este archivo reemplazar «asInvoker» con «requireAdministrator» como se explica en el comentado secciones dentro del archivo.

    Esta respuesta se acerca VB.NET 🙂 , no VS 2010 en general. El «Agregar Nuevo Elemento» respuestas acerca de C#. En C++ se puede hacer en la configuración del proyecto.

    OriginalEl autor Evolved

  7. 10

    Como por

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

    usted desea agregar un manifiesto de la aplicación, si usted no tiene ya uno o no saben cómo agregar uno. Como algunos proyectos no se agrega automáticamente separado del archivo de manifiesto, en primer lugar ir a propiedades del proyecto, vaya a la Aplicación ficha y comprobar para asegurarse de que su proyecto no está excluyendo el manifiesto en la parte inferior del grifo.

    • A continuación, haga clic en proyecto
    • Agregar nuevo Elemento
    • Último, busque y haga clic en Archivo de Manifiesto de Aplicación

    OriginalEl autor Justin Mcconnell

  8. 6

    Otra forma de hacer esto, en el código sólo es para detectar si el proceso se está ejecutando como admin como en la respuesta por @NG.. Y, a continuación, abra de nuevo la aplicación y cerrar la actual.

    Yo uso este código cuando una aplicación sólo necesita privilegios de administrador cuando se ejecuta bajo ciertas condiciones, como cuando se instala a sí mismo como un servicio. Por lo que no necesita ejecutar como administrador todo el tiempo como las otras respuestas forzarlo demasiado.

    Nota en el siguiente código NeedsToRunAsAdmin es un método que detecta si en las condiciones actuales privilegios de administrador son necesarios. Si este devuelve false el código no se eleve. Esta es una de las principales ventajas de este enfoque sobre los demás.

    Aunque este código tiene las ventajas mencionadas anteriormente, se hace necesario volver a iniciar un nuevo proceso que no siempre es lo 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);
    }

    OriginalEl autor TheLethalCoder

  9. 3

    esta es la 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;
        }
    }

    OriginalEl autor Hakam Fostok

  10. 2

    Puede crear el manifiesto mediante ClickOnce la Configuración de Seguridad y, a continuación, deshabilitar:

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

    Después de que usted hace clic en, un archivo se creará en el marco del Proyecto de propiedades de la carpeta llamada de la aplicación.manifiesto una vez creado, puede desactivar la Enable ClickOnce Security Settings opción

    Abrir el archivo y cambiar esta línea :

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

    :

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

    Esto hará que el programa se requieren privilegios de administrador.

    Gran @iojai Timmer gracias.

    OriginalEl autor Yochai Timmer

  11. -3

    Clic derecho en el ejecutable, ir a Propiedades > la Compatibilidad y la casilla «Ejecutar este programa como administrador».

    Si usted desea que se ejecute como admin para todos los usuarios, hacer lo mismo en el » cambio de la configuración para todos los usuarios.

    Esto no contesta la pregunta. «Una vez que el programa está instalado en un equipo cliente», no «¿cómo».
    Lo siento por ser claro. Una vez que el programa está instalado, cambiar esta configuración en el archivo ejecutable de propiedades (su principal programa, no el instalador). Él no quiere forzar a su programa para que se ejecute como admin.
    Su mejor conjunto de la administración requisito en el manifiesto. Yo diría que contesta a la pregunta, pero sólo apenas.
    Para ser justos, el aceptado la respuesta no respuesta de la OPs pregunta requiere que usted vuelva a instalar el ejecutable de la aplicación. Eso no es una solución para «una Vez que el programa está instalado». Si nada de esto votada abajo respuesta es más correcta que la aceptó contestar, así que no entiendo por qué esa respuesta tiene más de 400 votos.
    pero ves las etiquetas ? Tu post no es la solución, incluso la respuesta…

    OriginalEl autor SlickJayD

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea