image

Buenas,

la respuesta a la pregunta:

¿Es posible lanzar una aplicación desplegada con ClickOnce con permisos de administrador?

tiene una respuesta muy simple:

NO

La solución viene dos párrafos después, así que te podes ahorrar el siguiente texto. La forma correcta de definir que una aplicación requiera ciertos permisos es a través de un manifiesto. En el mismo, se puede indicar TODO lo que requiere una aplicación al momento de ejecutarse. El paso a paso, está en MSDN y se describe en:

El problema es que si tenemos una aplicación que luego desplegaremos con ClickOnce, aplicamos este cambio en el manifiesto y luego intentamos compilar nos encontramos con un hermoso

image

Error    1    ClickOnce does not support the request execution level ‘requireAdministrator’.  

Y ahora? pues una de las soluciones viene de la mano de este post, donde lo que se hace es básicamente verificar si la aplicación se lanza con permisos de ADMIN y en caso contrario, lanzar la aplicación nuevamente con los permisos adecuados.

He creado una pequeña clase que además de aplicar este proceso, muestra un mensaje avisando que se lanzará nuevamente la aplicación.

   1: public class RunAsAdministrator

   2: {

   3:     public bool IsRunAsAdministrator()

   4:     {

   5:         var windowsIdentity = WindowsIdentity.GetCurrent();

   6:         var windowsPrincipal = new WindowsPrincipal(windowsIdentity);

   7:         return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);

   8:     }

   9:  

  10:     public static void ValidateAdministratorModeAndRestart(bool displayMessage)

  11:     {

  12:  

  13:         var runAsAdministrator = new RunAsAdministrator();

  14:         if (runAsAdministrator.IsRunAsAdministrator()) return;

  15:  

  16:  

  17:         if (displayMessage)

  18:         {

  19:             var fi = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);

  20:             string productName = fi.FileDescription;

  21:             MessageBox.Show(string.Format("{0} will launch itself with admin privileges", productName));

  22:         }

  23:  

  24:         var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase)

  25:                               {

  26:                                   UseShellExecute = true,

  27:                                   Verb = "runas"

  28:                               };

  29:         try

  30:         {

  31:             Process.Start(processInfo);

  32:         }

  33:         catch (Exception)

  34:         {

  35:             MessageBox.Show("Sorry, this application must be run as Administrator.");

  36:         }

  37:         Application.Current.Shutdown();

  38:     }

  39: }

En mi caso ha bastado y salvo algunas excepciones que se me ocurren de memoria, creo que puede bastar Open-mouthed smile

Source: http://antscode.blogspot.com.es/2011/02/running-clickonce-application-as.html

Saludos @ Home

El Bruno

image image image

Leave a comment

Discover more from El Bruno

Subscribe now to keep reading and get access to the full archive.

Continue reading