質問

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

他のヒント

Did you try assigning administrative credentials to your ProcessStartInfo object?

SecureString password = new SecureString();
password.AppendChar('p');
password.AppendChar('w');
cmd.UserName = "admin";
cmd.Password = password;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top