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



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

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

也许我错过了命令行参数或类似参数?

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

最新更新