C# 重定向输入/输出时Cmd未提升

C# 重定向输入/输出时Cmd未提升,c#,wpf,cmd,C#,Wpf,Cmd,我正在尝试通过CMD命令运行自动安装。程序输出进度,我需要捕获该输出并在一个漂亮的窗口中计算总进度。在我看来,不可能同时提升和重定向。我试过 运行cmd并向其提供命令 var proc = new Process { StartInfo = new ProcessStartInfo { FileName = "cmd.exe", Verb = "runa

我正在尝试通过CMD命令运行自动安装。程序输出进度,我需要捕获该输出并在一个漂亮的窗口中计算总进度。在我看来,不可能同时提升和重定向。我试过

运行cmd并向其提供命令

        var proc = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "cmd.exe",
                Verb = "runas",
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardInput = true,
                RedirectStandardError = true,
                CreateNoWindow = true
            }
        };
        proc.Start();
        proc.StandardInput.WriteLine("command");
以命令作为参数运行cmd

            var proc = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = "cmd.exe",
                    Arguments = "/C " + "command",
                    Verb = "runas",
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    RedirectStandardInput = true,
                    RedirectStandardError = true,
                    CreateNoWindow = true
                }
            };
            proc.Start();

毫无效果。有什么诀窍吗?捕获输入/输出后提升?我需要这个来工作。psexec是否可以实现这一点

如果您拥有安装程序,您可以重写它们,使它们不使用标准流作为通信手段,例如。如果不这样做,您可以编写一个运行提升的包装程序(您使用
UseShellExecute
运行它),不使用标准流,但运行安装程序并重定向其输入(您运行它们时不使用
UseShellExecute
),通过命名管道或其他方式向不相关的主程序报告进度。我希望这张图表能更清楚地说明:

non-elevated.exe
    \
     \ named pipes
      \
elevated-wrapper.exe (ran with UseShellExecute=true)
        \
         \ redirected standard streams
          \
installer-program.exe (ran with UseShellExecute=false and redirected streams)

您正在尝试通过批处理程序运行自动安装,该批处理程序显示输出、捕获输出并实时显示。。。很抱歉,为什么不重写命令以通过WPF运行呢?无论如何,