Esegui processo elevato

Sto cercando di eseguire un comando cmd con il seguente codice:

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 i privilegi di amministratore, se eseguo cmd come amministratore e digito il comando funziona perfettamente, ma non quando eseguo questa app come amministratore. ho aggiunto

in un file manifest che richiede uac ogni volta che apro l’exe.

Ho visto più domande al riguardo 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 niente da fare.

È necessario impostare UseShellExecute su true affinché il Verb sia rispettato e deve essere impostato su “false” per redirect l’output standard. Non puoi fare entrambe le cose.

Sono abbastanza sicuro che Windows non ti consentirà di redirect gli input / output / errori standard attraverso il limite di sicurezza di admin / non-admin. Dovrai trovare un modo diverso per ottenere l’output dal programma in esecuzione come amministratore.

Non ho letto questo articolo, ma questo potrebbe darti ulteriori informazioni: http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

Hai provato ad assegnare credenziali amministrative all’object ProcessStartInfo ?

 SecureString password = new SecureString(); password.AppendChar('p'); password.AppendChar('w'); cmd.UserName = "admin"; cmd.Password = password;