我正在编写一个脚本,该脚本应该一个接一个地运行两个dotnet应用程序。根据它们的launchSettings.json
,一个在端口5000上,第二个在端口5001上到目前为止,这是运行应用程序的脚本:
$app1ProjectFolder = '../src/App1'
$app2ProjectFolder = '../src/App2'
Write-Host "STARTING APP1" -foreground Green
Push-Location $app1ProjectFolder
$dotnetRunCommandApp1 = 'run'
$app1Process = Start-Process dotnet -ArgumentList $dotnetRunCommandApp1 -PassThru
Pop-Location
Write-Host "STARTING APP2" -foreground Green
Push-Location $app2ProjectFolder
$dotnetRunCommandApp2 = 'run'
$app2Process = Start-Process dotnet -ArgumentList $dotnetRunCommandApp2 -PassThru
Pop-Location
我需要的是脚本在启动第二个应用程序之前等待第一个应用程序完成启动或可在其指定端口上访问。
答案 0 :(得分:0)
Start-Process具有-wait开关,该开关应防止脚本继续执行直到完成。
$app1Process = Start-Process dotnet -ArgumentList $dotnetRunCommandApp1 -PassThru -wait
指示此cmdlet在接受更多输入之前等待指定的过程及其后代完成。此参数隐藏命令提示符或保留窗口,直到进程完成。
答案 1 :(得分:0)
您可以使用:
while (!(Test-NetConnection localhost -Port 5000).TcpTestSucceeded) { Start-Sleep 1 }
无限期等待端口准备就绪。
您可以添加最长等待时间,例如说该应用程序仍在运行,但无法收听或被防火墙保护。