C# 执行时无法从 .exe 读取输出

C# Unable to read output from .exe when executing

我的问题是当我执行给定命令时没有输出。
该 exe 需要很长时间才能完成,并且在执行时我期望输出连续的数据流。 但出于某种原因,我的程序似乎只是忽略了 exe 的输出。

我觉得我已经尝试了所有方法,但没有运气。
我已经尝试过其他命令,例如“tree c:/”,我能够很好地接收到该输出。 我确定我正在执行的命令是有效的。 我已经在单独的 cmd 中单独测试了该命令,它可以正常工作。

我也试过 运行 只有 exe 的进程。 这也屈服于输出。

我已经坚持了一段时间,所以任何帮助将不胜感激。

Task.Run(() =>
    {
        string command = downloadPath + @"\myinstall.exe quickinstallall";
        var startInfo = new ProcessStartInfo("cmd.exe")
        {
              WorkingDirectory = downloadPath,
              UseShellExecute = false,
              RedirectStandardInput = true,
              RedirectStandardError = true,
              RedirectStandardOutput = true,
              WindowStyle = ProcessWindowStyle.Normal,
              CreateNoWindow = false,

              Verb = "runas"                
        };
        Process cmd = new Process { StartInfo = startInfo };
        cmd.EnableRaisingEvents = true;
        cmd.OutputDataReceived += UpdateOutput;
        cmd.ErrorDataReceived += UpdateOutput;             
        cmd.Start();
        cmd.BeginOutputReadLine();
        cmd.StandardInput.WriteLine(command);
        cmd.BeginErrorReadLine();
        cmd.WaitForExit();
    });

好的,我想通了为什么没有记录输出。 我只是缺少 2 行代码...

 cmd.StandardInput.Flush();
 cmd.StandardInput.Close();

我不得不删除 runas,而是从应用程序本身继承管理员权限。 通过“继承管理员权限”,我的意思只是确保应用程序始终以管理员身份执行。

我不知道为什么这完全解决了我的问题,但它现在似乎运行良好。 如果有人知道为什么会这样,我很想知道。