在 C# 中启动一个批处理文件,然后等待它退出再继续

Posted

技术标签:

【中文标题】在 C# 中启动一个批处理文件,然后等待它退出再继续【英文标题】:Starting a batch file in C# and then waiting for it to exit before continuing 【发布时间】:2013-10-08 19:01:15 【问题描述】:

问题是 WaitForExit 没有等到批处理文件退出。它几乎马上就回来了。

我正在按如下方式启动我的批处理文件:

            ProcessStartInfo startInfo = new ProcessStartInfo(batchFile);
            startInfo.UseShellExecute = true;
            startInfo.Arguments = arguments;

            using (Process p = Process.Start(startInfo))
            
                p.WaitForExit();
            

我尝试了使用和不使用UseShellExecute

【问题讨论】:

This answer 可能会有所帮助。 如果 WaitForExit() 不起作用,请尝试关注 this 那也没用。这个批处理文件一定是独一无二的。批处理文件会调用其他进程,但会等到它们全部退出后再返回。 【参考方案1】:

您可以尝试使用“/c yourbatchfile”作为命令行参数来运行 cmd。

【讨论】:

【参考方案2】:

看来你可以重定向StdOut并阅读它直到它关闭。

这个想法来自this similar question。

调整你的 sn-p,那就是:

ProcessStartInfo startInfo = new ProcessStartInfo(batchFile);
//startInfo.UseShellExecute = true;
startInfo.Arguments = arguments;
startInfo.RedirectStandardOutput = true;

Process p = Process.Start(startInfo);
String output = proc.StandardOutput.ReadToEnd();

【讨论】:

以上是关于在 C# 中启动一个批处理文件,然后等待它退出再继续的主要内容,如果未能解决你的问题,请参考以下文章

执行后 PExec 不退出

非阻塞等待子进程退出

如何等待进程终止以在批处理文件中执行另一个进程

C#如何在不等待完成的情况下启动异步方法?

启动进程并等待退出代码而不冻结

Nodemon - 安装期间“干净退出 - 等待重新启动前的更改”