¿Que necesito para instalar app y que no vuelva a pedir permisos de aplicacion?

Iniciado por Kaxperday, 21 Mayo 2015, 01:31 AM

0 Miembros y 1 Visitante están viendo este tema.

Kaxperday

Pues eso, quiero instalar un programa que necesita elevacion UAC y no se como ponerlo.

Pues le pongo requireAdministrator, y lo anclo al registro, pero luego no funciona y sigue con los permisos de administrador, ¿que hago entonces?.

Ayuda please.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

kub0x

Cita de: Kaxperday en 21 Mayo 2015, 01:31 AM
Pues le pongo requireAdministrator, y lo anclo al registro, pero luego no funciona y sigue con los permisos de administrador, ¿que hago entonces?.

¿Sólo quieres que se ejecute como Admin una vez? Dale un vistazo a "runas". Sino, podrías reescribir el manifest después de la instalación para que cuando se ejecute en el inicio (gracias al registro) no pida privilegios.

Saludos.
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Kaxperday

Antes de escribir esto ya me baje lo de runas, el código era el siguiente:

Código (csharp) [Seleccionar]
public void elevacionUAC()
       {
           // Launch itself as administrator
           ProcessStartInfo proc = new ProcessStartInfo();
           proc.UseShellExecute = true;
           proc.WorkingDirectory = Environment.CurrentDirectory;
           proc.FileName = Application.ExecutablePath; //System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
           proc.Verb = "runas";

           try
           {
               Process.Start(proc);
           }
           catch
           {
               // The user refused to allow privileges elevation.
               // Do nothing and return directly ...
               return;
           }

           Application.Exit();  // Quit itself
       }


Esto es una función que al ejecutarla pide permisos de administrador para el programa, en un diálogo.

Aunque si solo hay esta manera y la anterior, (la de editar el manifiesto) me quedo con la del manifiesto y para casos especiales con esta, es decir con ambas.

Parece que he encontrado como añadirla de excepcion al firewall:

netsh firewall add allowedprogram C:\MyApp\MyApp.exe MyApp ENABLE

Lo necesito para que al ejecutarse se conecte a internet, no se si debería cambiar algo en el antivirus por si me bloquea o algo así, saludos.

Hola kubox, como puedo ponerle para editar el manifiesto en ejecucion.

No se como acceder a sus atributos desde el codigo, saludos.

Por cierto en el codigo anterior no compilaba no encuentra Application, no estoy en windows forms, como lo puedo solucionar? xd




Buenas a todos gente, al final tras mucho rastrear por ahí he conseguido ponerlo, que me pida permisos de usuario en plena ejecucion del programa por si lo necesita en algun momento, para ello lo unico que he encontrado es con un form, que te salga una ventanita y le das click a un boton, y entonces te sale lo de los permisos del UAC, pero sin el form no he encontrado nada, os dejo el code.

Código (csharp) [Seleccionar]
public partial class UAC : Form
   {
       public UAC()
       {
           InitializeComponent();
       }


       private void UAC_Load(object sender, EventArgs e)
       {
           // Update the Self-elevate button to show a UAC shield icon.
           this.btnElevate.FlatStyle = FlatStyle.System;
           SendMessage(btnElevate.Handle, BCM_SETSHIELD, 0, (IntPtr)1);
       }

       [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)]
       static extern int SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, IntPtr lParam);

       const UInt32 BCM_SETSHIELD = 0x160C;


       private void btnElevate_Click(object sender, EventArgs e)
       {
           // Launch itself as administrator
           ProcessStartInfo proc = new ProcessStartInfo();
           proc.UseShellExecute = true;
           proc.WorkingDirectory = Environment.CurrentDirectory;
           proc.FileName = Application.ExecutablePath;
           proc.Verb = "runas";

           try
           {
               Process.Start(proc);
               MessageBox.Show("Tenemos permisos");
           }
           catch
           {
               MessageBox.Show("SIN PERMISOS");
               // The user refused to allow privileges elevation.
               // Do nothing and return directly ...
               return;
           }

           Application.Exit();  // Quit itself
       }
   }



Alguien me puede decir como editar el archivo de manifiesto XML en ejecución??

Y se os ocurre otra manera para hacerlo mas en "background" y sin form?

Ademas no veo solucion al codigo pues lo unico que hace es re-ejecutar el programa como administrador desde 0 (lo estoy probando y al aceptar me vuelve a ejecutar el programa  :¬¬ :¬¬ :¬¬

Quizás con esto se pueda editar el manifiesto en ejecución para cambiarlo a asInvoker.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.