Cómo forzar que una aplicación WPF se ejecute en modo Administrador


Tengo una aplicación WPF que accede a servicios de Windows, programadores de tareas en la máquina local. Cuando implemente esta aplicación WPF y la ejecute sin "Ejecutar como administrador", falla ya que no puede acceder a los servicios de Windows y los planificadores de tareas en la máquina local. Si lo corro con "Ejecutar como administrador", funciona correctamente.

¿Cómo puedo hacer que mi aplicación se ejecute de forma predeterminada en modo admin cuando se implementa en producción?

Author: SVI, 2011-03-11

2 answers

Necesitas agregar un app.manifest. Cambiar el requestedExecutionLevel de asInvoker a requireAdministrator. Puede crear un nuevo manifiesto utilizando el cuadro de diálogo agregar archivo, cámbielo a requerir administrador. Asegúrese de que la configuración de su proyecto esté configurada para usar ese manifiesto también. Esto le permitirá simplemente hacer doble clic en la aplicación y se le pedirá automáticamente para la elevación si no lo es ya.

Vea aquí para más información documentación:

Http://msdn.microsoft.com/en-us/library/bb756929.aspx

EDITAR: Por si sirve de algo, el artículo usa VS 2005 y usa mt.exe para incrustar el manifiesto. si está utilizando Visual studio 2008+, esto está integrado. Simplemente abra las propiedades de su Proyecto, y en la pestaña "Aplicación" puede seleccionar el manifiesto.

 65
Author: vcsjones,
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-03-11 18:35:30

Si no quieres romper el Clickonce este código es la mejor solución:

using System.Security.Principal;
using System.Management;
using System.Diagnostics;
using System.Reflection;
//Put this code in the main entry point for the application
// Check if user is NOT admin 
if (!IsRunningAsAdministrator())
{
    // Setting up start info of the new process of the same application
    ProcessStartInfo processStartInfo = new ProcessStartInfo(Assembly.GetEntryAssembly().CodeBase);

    // Using operating shell and setting the ProcessStartInfo.Verb to “runas” will let it run as admin
    processStartInfo.UseShellExecute = true;
    processStartInfo.Verb = "runas";

    // Start the application as new process
    Process.Start(processStartInfo);

    // Shut down the current (old) process
    System.Windows.Forms.Application.Exit();
    }
}

/// <summary>
/// Function that check's if current user is in Aministrator role
/// </summary>
/// <returns></returns>
public static bool IsRunningAsAdministrator()
{
    // Get current Windows user
    WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();

    // Get current Windows user principal
    WindowsPrincipal windowsPrincipal = new WindowsPrincipal(windowsIdentity);

    // Return TRUE if user is in role "Administrator"
    return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}

Fundada en: http://matijabozicevic.com/blog/wpf-winforms-development/running-a-clickonce-application-as-administrator-also-for-windows-8

 0
Author: Mårshåll,
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-08-12 01:37:13