¿Cómo puedo hacer una aplicación de consola, ejecutar siempre como administrador?

Tengo una aplicación de consola que fue desarrollado para ser llamado por un software erp.

Que llame a mi aplicación dentro de la erp y cuando lo hacen, siempre tengo errores relacionados con la insuficiente permiso para hacerlo.

Tengo marcada la opción «ejecutar este programa como administrador» casilla de verificación en las propiedades del archivo exe para todos los usuarios, pero el resultado es el mismo.

He leído algo acerca de la adición de un manifiesto que hará que la aplicación del sistema para el uac de diálogo, pero eso no es lo que quiero ya que la aplicación será llamado de erp en el servidor y los clientes no verán el cuadro de diálogo en el servidor.

Me puede alguien explicar cómo hacer que esta aplicación de consola, siempre ejecutar como administrador?

¿Por qué este programa de la consola necesita privilegios de administrador?

OriginalEl autor Marco | 2013-03-13

3 Kommentare

  1. 7

    Primero, entender que habrá un cuadro de diálogo de UAC en algún momento de este proceso. No hay manera de evitarlo. Hay algunos enfoques que puede tomar:

    • La gente se ejecute el software ERP elevados. Estoy incluyendo este sólo para la integridad. Es horrible tener el consentimiento para el mensaje de UAC cada vez que se ejecuta la aplicación cuando por lo general no necesitan de los poderes. Sería una práctica de prueba rápida, aunque, para que confirme si su aplicación es elevado, las cosas van a trabajar. Todo lo lanzó desde un elevado proceso es elevado, por lo que si tu aplicación todavía recibe el mensaje de error, esto no es algo que se va a arreglar por elevación.
    • Cambie el código en el ERP de la aplicación para iniciar la aplicación elevados. Usted menciona a C#. Lanzamiento con la runas verbo es un enfoque aquí. Esto pone la carga sobre el ERP desarrollador y que puede no ser capaz de hacerlo.
    • Agregar un manifiesto para su aplicación. Puede incrustar uno, o si la aplicación se llama foo.exe simplemente crear un foo.exe.archivo de manifiesto con el adecuado nivel de ejecución solicitado. Incrustar uno, utilice la página de Propiedades de su proyecto de C# para elegir el tipo correcto de manifiesto. Asegúrese de que está en marcha con UseShellExecute establece en true, o el manifiesto será ignorado.

    Si usted elige la primera opción, el mensaje de UAC será cada vez que el ERP lanza aplicación. No es buena. Si elige la segunda o la tercera, el mensaje de UAC será, cada vez que su aplicación de consola se lanza desde el ERP de la aplicación. Probablemente aceptable.

    Otra cosa que usted puede considerar es de aspecto mucho más serio en el porqué de la aplicación de consola necesidades de administración de privs. Escribía a la raíz de C o a Archivos de Programa? Se va a actualizar una clave del registro HKLM? Lo que estás haciendo, ¿por qué hacerlo de esa manera? A menos que su aplicación se instala o configura algo (en el que caso de llegar un mensaje de UAC es bueno y correcto) usted debe tratar de adaptarlo para que se escribe para pre-almacenamiento disponible para el usuario y no necesita de elevación. Entonces dejará de preocuparse acerca de cómo iniciar es elevada, en cualquier caso.

    «Otra de las cosas que usted puede considerar es de aspecto mucho más serio en el porqué de la aplicación de consola necesidades de administración de privs.» Bien dicho. Esto es exactamente y precisamente la pregunta correcta para pedir.
    weel voy a agregar certificados x509 a la tienda windows, la lectura de los certificados de almacenar, acceder a una base de datos y conectarse a un webservice externo.Es obligatoria para tener derechos de administración?
    también estoy usando EventLog.WriteEntry() a errores de registro en el visor de sucesos. así que creo que realmente neeed derechos de administrador. a la derecha?
    el acceso a la base de datos, la conexión a un webservice, y la escritura en el registro de sucesos DEFINITIVAMENTE no necesita derechos de administrador. Crear el registro de sucesos de la primera vez que lo hace. No estoy seguro acerca de los certificados, pero que vale la pena considerar
    así la escritura en el registro de sucesos de necesidad privilegios elevados.He quitado esta línea de código y ahora estoy haciendo el registro directamente a la base de datos. ahora se está trabajando. gracias por señalarme la dirección correcta.

    OriginalEl autor

  2. 27

    Agregar a su proyecto de Manifiesto de la Aplicación de Archivo (Add -> Nuevo Elemento -> General> Archivo de Manifiesto de Aplicación) y añadir la siguiente nodo en la aplicación.manifiesto:

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

    http://msdn.microsoft.com/en-us/library/windows/desktop/bb756929.aspx

    Excelente solución, gracias
    Esta debe ser la respuesta, mucho más directa y simple.

    OriginalEl autor

  3. 0

    crear un archivo por lotes que contiene algo así como:

    runas /env /user:%USERDOMAIN%\%USERNAME% cmd.exe /K YourProgramName.exe

    Donde %USERDOMAIN% y %USERNAME% son reemplazados por su cuenta admin detalles.

    Y ejecutar ese lugar?

    Que va a ejecutar la aplicación como usuario pero no elevar la sesión de administrador, incluso si el usuario tiene derechos de administrador

    OriginalEl autor

Kommentieren Sie den Artikel

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

Pruebas en línea