2011-12-31 59 views
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()); 

这个命令需要管理员privelages,如果我下运行cmd以管理员身份,然后键入命令它完美,但不是当我运行这个应用程序为管理员我已经加入

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

到UAC提示每次我打开exe文件时的清单文件。

我已经看到了这个问题的多个问题,他们似乎都建议任何进程运行在高架应用程序将具有相同的权利,但这不适合我。我试过cmd.Verb = "runas";但没有骰子。

+0

尝试改变'cmd.UseShellExecute'到TRUE;并保持'runas'动词。 – keyboardP 2011-12-31 21:09:12

+0

只是试过了,但得到了这个错误'为了重定向IO流,Process对象必须将UseShellExecute属性设置为false。“谢谢。 – 2011-12-31 21:11:45

+4

这就是降压停止的地方,你不能两面都有。 UAC可以防止高架桥梁的高架起降能力。您可以重新定向的唯一方法是首先提升自己。 – 2011-12-31 23:24:33

回答

13

您需要设置UseShellExecutetrueVerb得到尊重,并且必须设置为“假”来重定向标准输出。你不能这样做。

我敢肯定,Windows也不允许你跨管理/非管理安全边界重定向标准输入/输出/错误。你必须找到一种不同的方式来获得以管理员身份运行的程序的输出。

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

+0

我尝试使用UseShellExecute = false; Verb =“runas”; RedirectStandardInput = true; Domain = du [0]; UserName = UserAdministrator; Password = SecureStringHelper.ToSecureString(pwd); LoadUserProfile = true; 并在清单中使用requestedExecutionLevel。 如果我使用UseShellExecute = true;我得到错误Process对象必须将UseShellExecute属性设置为false才能以用户身份启动进程。 – Kiquenet 2014-08-22 11:10:12

+0

完整示例以不同的方式获取以管理员身份运行的程序的输出? – Kiquenet 2014-08-28 06:31:03

2

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

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

我不能这样做,因为我需要UAC来提示他们,因为它会在多台PC上使用,谢谢。 – 2011-12-31 21:21:55

+0

好的,有道理。你能告诉我为什么你要创建一个命令进程并指示它执行“sc”而不是直接运行“sc”命令? – Abbas 2011-12-31 21:27:16

+0

我想通过一个winform上的按钮来运行sc命令,因为用户不知道如何使用sc,只是为了让他们轻松使用该程序。 – 2012-01-01 11:35:42