当 UseShellExecute == false 时,如何在 C# 进程上强制执行标准输出?

How do I force standard output on a C# Process when UseShellExecute == false?

我 运行 使用以下代码从 C# 处理;

private static void ExecuteShellCMD(string workingDir, string commandWithArgs, bool bWait = true)
{
    ProcessStartInfo info = new ProcessStartInfo();
    info.Verb = "runas";
    info.FileName = "cmd.exe";
    info.WorkingDirectory = workingDir;
    info.Arguments = "/C " + commandWithArgs;
    info.UseShellExecute = false;
    using (Process myProcess = Process.Start(info))
    {
        if (bWait)
        {
            myProcess.WaitForExit();
        }

        int ExitCode = myProcess.ExitCode;

        //Log exit code here.
    }
}

它加载提升的命令 window 并执行我传递给它的 code/bat 文件,但是 没有 将任何内容记录到控制台。这在其他机器上似乎不一致,并且过去在我的机器上工作过,我想知道是否有人对我如何始终如一地使这个过程有任何想法,只需将日志打印到命令 window过程使。

如果设置 UseShellExecute = true,我可以看到日志,但如果不接受提升提示就无法使用 Verb,这是不希望的。

我尝试在网上寻找解决方案,并且我知道我可以使用其他设置重定向输出。关于这个主题的大多数问题和教程似乎都涉及将输出重定向到其他地方,但我希望能够跟踪命令 window 本身的进度。

也许我漏掉了命令行参数或类似参数?

事实证明,这实际上是 Unity Hub 中的一个错误。过程和输出工作正常,但是当 运行 来自从 Unity Hub 启动的 Unity 实例时,它控制了输出并且没有释放它。只需直接启动 Unity 即可解决此问题,并且已针对 Unity hub 提交错误报告。