Executar processo elevado

Eu estou tentando executar um comando cmd com o seguinte código:

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()); 

Esse comando requer privilégios de administrador, se eu executar cmd como administrador e digitar o comando que funciona perfeitamente, mas não quando eu executar este aplicativo como admin. Eu adicionei

para um arquivo de manifesto que solicita o uac toda vez que eu abro o exe.

Eu tenho visto várias perguntas sobre isso e todos parecem sugerir que qualquer processo executado em um aplicativo elevado terá os mesmos direitos, mas isso não está funcionando para mim.

Eu tentei cmd.Verb = "runas"; mas sem dados.

Você precisa definir UseShellExecute como true para que o Verb seja respeitado e deve ser definido como ‘false’ para redirect a saída padrão. Você não pode fazer as duas coisas.

Tenho certeza de que o Windows também não permitirá que você redirecione a input / saída / erro padrão através do limite de segurança administrativo / não administrativo. Você terá que encontrar uma maneira diferente de obter a saída do programa em execução como admin.

Eu não li este artigo, mas isso pode lhe dar mais informações: http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

Você tentou atribuir credenciais administrativas ao seu object ProcessStartInfo ?

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