Antes de escribir esto ya me baje lo de runas, el código era el siguiente:
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.
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.