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

时间:2018-04-27 16:12:53

标签: c# batch-file process output redirectstandardoutput

我正在使用以下代码从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.
    }
}

它加载一个提升的命令窗口并执行我传递的代码/ bat文件,但没有将任何内容记录到控制台。这在其他机器上看起来并不一致,并且过去在我的机器上工作过,我想知道是否有人对我如何能够始终如一地使这个过程只是将日志打印到命令窗口进行操作

如果我设置了UseShellExecute = true,我就可以看到日志,但是如果不接受不合需要的提升提示,则无法使用Verb

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

也许我错过了一个命令行参数或类似的东西?

1 个答案:

答案 0 :(得分:0)

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