C#同步进程启动

21

我正在尝试从一段代码中启动一个进程,但我希望该代码在进程完成并退出之前暂停执行。目前,我正在使用System.Diagnostics.Process.Start()类来启动(具体地说)卸载程序,并且在之后执行的代码依赖于安装程序卸载程序在恢复执行之前完成。

以下是代码:

using System.Diagnostics;

var procStIfo = new ProcessStartInfo("cmd", "/c " + variableContainingUninstallerPath);
procStIfo.RedirectStandardOutput = true;
procStIfo.UseShellExecute = false;
procStIfo.CreateNoWindow = true;

var proc = new Process();
proc.StartInfo = procStIfo;
proc.Start();
1个回答

44

在调用Start()之后,添加以下内容:

proc.WaitForExit();

详见Process.WaitForExit了解详情。


1
我知道这是一篇旧帖子,但在2021年仍然适用。因此,我想指出使用Copsey先生的答案时一个重要的细微差别:启动的进程可能会激活现有实例并将执行传递给该现有进程,然后返回,就好像它已经完成了,但实际上并没有。当我使用Process.Start打开PDF文件时,我遇到了这个问题。Adobe Reader将在现有实例中打开PDF,然后WaitForExit将触发,就好像进程已经完成,即使PDF仍然打开。这个细微差别使得WaitForExit()对我的目的不可用。 - Joe Gayetty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接