PowerShell:当子进程运行时,Start-Process永远不会退出

时间:2016-07-20 09:41:51

标签: powershell

我使用Start-Process启动进程,该进程也启动进程:

$p = Start-Process "ProcessRunner.exe" -ArgumentList "notepad.exe"  -NoNewWindow -Wait -PassThru
$exitCode = $p.ExitCode

ProcessRunner (父进程)启动在 ArgumentList (' notepad.exe' - 子进程)中指定的应用程序,然后退出并使用某个特定的exitCode在脚本的另一部分中使用。

在powershell 2.0中,这工作正如我预期的那样:即使子进程继续执行,在ProcessRunner退出后脚本也会立即继续。

在powershell 4.0中,脚本执行暂停,直到notepad.exe退出。

当子进程仍在运行时(即ps2的行为),是否有可能获得(在ps4中)父进程的exitCode?

编辑: 简单的ProcessRunner,可用于重现问题:

static int Main(string[] args)
{
    int result;

    try
    {
        Process prc = new Process();
        prc.StartInfo.FileName = args[0];
        result = prc.Start() ? 0 : 1;
    }
    catch (Exception e)
    {
        result = -1;
    }

    Console.WriteLine("ExitCode = {0}", result);
    return result;
}

使用$p.WaitForExit()代替-Wait会带来更好的结果(脚本会按要求继续执行)但$p.ExitCode未设置且其值为$null,因为您可以确保自己Write-Host "[PS] ExitCode = $p.ExitCode"(打印结果为[PS] ExitCode =

0 个答案:

没有答案