Sto cercando di eseguire un comando cmd con il seguente codice:Run elevato processo
ProcessStartInfo cmd = new ProcessStartInfo("cmd.exe");
cmd.RedirectStandardInput = true;
cmd.RedirectStandardOutput = true;
cmd.RedirectStandardError = true;
cmd.UseShellExecute = false;
cmd.CreateNoWindow = true;
cmd.WindowStyle = ProcessWindowStyle.Hidden;
Process exec = Process.Start(cmd);
exec.StandardInput.WriteLine("sc create \"BaliService\" binPath= \"{0}\\BaliService.exe\"", Directory.GetCurrentDirectory());
Questo comando richiede privelages di amministrazione, se corro cmd come amministratore e digitare il comando funziona perfettamente ma non quando corro questa app come amministratore. Ho aggiunto
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
ad un file manifesto che UAC ogni volta che apro il file EXE.
Ho visto più domande su questo e sembrano suggerire che tutti i processi eseguiti con un'app elevata avranno gli stessi diritti ma questo non funziona per me.
Ho provato cmd.Verb = "runas";
ma nessun dado.
Provare a cambiare cmd.UseShellExecute' a 'true'' e mantenere il verbo 'runas'. – keyboardP
Ho appena provato, ma ho ricevuto questo errore 'L'oggetto Processo deve avere la proprietà UseShellExecute impostata su false per poter reindirizzare i flussi IO. Grazie. –
Ecco dove si ferma il dollaro, non puoi averlo in entrambe le direzioni. UAC impedisce a un processo non elevato di sfruttare le capacità di un livello elevato. L'unico modo per reindirizzare è elevare te stesso per primo. –