我使用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? p>
编辑: 简单的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 =
)