Foro de elhacker.net

Sistemas Operativos => Windows => Mensaje iniciado por: Kaxperday en 21 Mayo 2015, 01:31 am



Título: ¿Que necesito para instalar app y que no vuelva a pedir permisos de aplicacion?
Publicado por: Kaxperday en 21 Mayo 2015, 01:31 am
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.


Título: Re: ¿Que necesito para instalar app y que no vuelva a pedir permisos de aplicacion?
Publicado por: kub0x en 21 Mayo 2015, 01:47 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.


Título: Re: ¿Que necesito para instalar app y que no vuelva a pedir permisos de aplicacion?
Publicado por: Kaxperday en 21 Mayo 2015, 15:54 pm
Antes de escribir esto ya me baje lo de runas, el código era el siguiente:

Código
  1. public void elevacionUAC()
  2.        {
  3.            // Launch itself as administrator
  4.            ProcessStartInfo proc = new ProcessStartInfo();
  5.            proc.UseShellExecute = true;
  6.            proc.WorkingDirectory = Environment.CurrentDirectory;
  7.            proc.FileName = Application.ExecutablePath; //System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
  8.            proc.Verb = "runas";
  9.  
  10.            try
  11.            {
  12.                Process.Start(proc);
  13.            }
  14.            catch
  15.            {
  16.                // The user refused to allow privileges elevation.
  17.                // Do nothing and return directly ...
  18.                return;
  19.            }
  20.  
  21.            Application.Exit();  // Quit itself
  22.        }

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
  1. public partial class UAC : Form
  2.    {
  3.        public UAC()
  4.        {
  5.            InitializeComponent();
  6.        }
  7.  
  8.  
  9.        private void UAC_Load(object sender, EventArgs e)
  10.        {
  11.            // Update the Self-elevate button to show a UAC shield icon.
  12.            this.btnElevate.FlatStyle = FlatStyle.System;
  13.            SendMessage(btnElevate.Handle, BCM_SETSHIELD, 0, (IntPtr)1);
  14.        }
  15.  
  16.        [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)]
  17.        static extern int SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, IntPtr lParam);
  18.  
  19.        const UInt32 BCM_SETSHIELD = 0x160C;
  20.  
  21.  
  22.        private void btnElevate_Click(object sender, EventArgs e)
  23.        {
  24.            // Launch itself as administrator
  25.            ProcessStartInfo proc = new ProcessStartInfo();
  26.            proc.UseShellExecute = true;
  27.            proc.WorkingDirectory = Environment.CurrentDirectory;
  28.            proc.FileName = Application.ExecutablePath;
  29.            proc.Verb = "runas";
  30.  
  31.            try
  32.            {
  33.                Process.Start(proc);
  34.                MessageBox.Show("Tenemos permisos");
  35.            }
  36.            catch
  37.            {
  38.                MessageBox.Show("SIN PERMISOS");
  39.                // The user refused to allow privileges elevation.
  40.                // Do nothing and return directly ...
  41.                return;
  42.            }
  43.  
  44.            Application.Exit();  // Quit itself
  45.        }
  46.    }


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 (http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime) se pueda editar el manifiesto en ejecución para cambiarlo a asInvoker.