运行提升进程

本文关键字:进程 运行 | 更新日期: 2023-09-27 18:19:06

我试图用以下代码运行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";,但没有骰子。

运行提升进程

您需要将UseShellExecute设置为true以尊重Verb,并且必须将其设置为'false'以重定向标准输出。你不能两者兼顾。

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

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

是否尝试为ProcessStartInfo对象分配管理凭据?

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