C#:使用提升的权限运行命令并捕获输出

C#:使用提升的权限运行命令并捕获输出,c#,process,elevated-privileges,elevation,privilege-elevation,C#,Process,Elevated Privileges,Elevation,Privilege Elevation,我希望在捕获输出时使用提升的权限运行命令: using System.Diagnostics; namespace SO { class Program { static void Main(string[] args) { ProcessStartInfo startInfo = new ProcessStartInfo("FSUTIL", "dirty query c:"); startInf

我希望在捕获输出时使用提升的权限运行命令:

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
,它不兼容
重定向StandardOutpu


有什么可能的解决方案吗?

这不是对您要求的确切回答,但会向您展示一些方法上的问题以及避免所有问题的方法

如果您的程序不是以提升的方式运行,那么每次调用外部程序时,它都会向用户请求提升的权限,因此在某个时候会请求用户将权限提升到某个程序

也就是说,您可以使用提升的权限运行您的程序,这样,当您启动外部程序时,它将继承提升的权限


要让您的程序在运行时请求提升的权限,请阅读

,这并不是对您的请求的确切回答,但会向您显示一些方法上的问题以及避免所有问题的方法

如果您的程序不是以提升的方式运行,那么每次调用外部程序时,它都会向用户请求提升的权限,因此在某个时候会请求用户将权限提升到某个程序

也就是说,您可以使用提升的权限运行您的程序,这样,当您启动外部程序时,它将继承提升的权限


要使您的程序在运行时请求提升权限,请在我设置时读取

,应用程序将在单独的控制台中打开。所以我还是抓不到stdout。我想从提升的控制台窃取输出,并将其复制到原始控制台中的。删除“runas”动词并确保将UseShellExecute设置为false。这样做没有任何效果。我认为在不同的控制台中打开提升的控制台应用程序是正常的。关键是在新的提升控制台中捕获输出,并在原来的控制台上发送。当我设置时,应用程序在单独的控制台中打开。所以我还是抓不到stdout。我想从提升的控制台窃取输出,并将其复制到原始控制台中的。删除“runas”动词并确保将UseShellExecute设置为false。这样做没有任何效果。我认为在不同的控制台中打开提升的控制台应用程序是正常的。关键是在新的提升控制台中捕获输出,并在原始控制台上发送。