I am trying to run a cmd command with the following code:
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());
This command requires admin privelages, if I run cmd as administrator and type the command it works perfectly but not when I run this app as admin. I have added
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
to a manifest file which prompts uac each time I open the exe.
I have seen multiple questions on this and they all seem to suggest any processes run under an elevated app will have the same rights but this isn't working for me.
I have tried cmd.Verb = "runas";
but no dice.
You need to set UseShellExecute
to true
for the Verb
to be respected and it must be set to 'false' to redirect standard output. You can't do both.
I'm pretty sure Windows also won't allow you to redirect standard input/output/error across the admin/non-admin security boundary. You'll have to find a different way to get output from the program running as admin.
I didn't read this article, but this may give you more information: http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx