5

我正在尝试使用以下代码运行 cmd 命令:

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

此命令需要管理员权限,如果我以管理员身份运行 cmd 并键入命令,它可以完美运行,但当我以管理员身份运行此应用程序时却不行。我已经添加了

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

到一个清单文件,每次我打开 exe 时都会提示 uac。

我已经看到了多个关于此的问题,它们似乎都表明在提升的应用程序下运行的任何进程都将具有相同的权利,但这对我不起作用。

我试过cmd.Verb = "runas";但没有骰子。

4

2 回答 2

13

您需要将其设置UseShellExecutetrueVerb尊重,并且必须将其设置为“false”以重定向标准输出。你不能两者都做。

我很确定 Windows 也不允许您跨管理员/非管理员安全边界重定向标准输入/输出/错误。您必须找到一种不同的方法来从以管理员身份运行的程序中获取输出。

我没有读过这篇文章,但这可能会给你更多信息: http: //www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

于 2011-12-31T21:29:51.953 回答
2

您是否尝试将管理凭据分配给您的ProcessStartInfo对象?

SecureString password = new SecureString();
password.AppendChar('p');
password.AppendChar('w');
cmd.UserName = "admin";
cmd.Password = password;
于 2011-12-31T21:20:27.037 回答