运行提升过程

我正在尝试使用以下代码运行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并键入命令它完美运行但不是当我以管理员身份运行此应用程序时。 我已经添加了

每次打开exe时提示uac的清单文件。

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

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

您需要将UseShellExecute设置为true才能使Verb受到尊重,并且必须将其设置为“false”才能重定向标准输出。 你不能两者都做。

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

我没有读过这篇文章,但这可能会为您提供更多信息: 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;