我想在捕获输出时以提升的权限运行命令:
using System.Diagnostics;
namespace SO
{
class Program
{
static void Main(string[] args)
{
ProcessStartInfo startInfo = new ProcessStartInfo("FSUTIL", "dirty query c:");
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.Verb = "runas";
var proc = new Process();
proc.StartInfo = startInfo;
proc.Start();
proc.WaitForExit();
string output = proc.StandardOutput.ReadToEnd();
System.Console.WriteLine(output);
}
}
}
问题是startInfo.Verb = "runas";
需要startInfo.UseShellExecute = true;
,这RedirectStandardOutpu
不兼容。
有什么可能的解决方案吗?
这不是对您的请求的确切答案,但会向您展示您的方法上的一些问题以及避免所有问题的方法。
如果程序未以提升方式运行,则每次调用外部程序时,它都会向用户请求提升的权限,因此在某些时候将要求用户将权限提升到程序。
也就是说,您可以使用提升的权限运行程序,这样当您启动外部程序时,它将继承提升的权限。
要执行程序以在运行时请求提升的权限,请阅读这篇文章。