如何在调用 CloseMainWindow 之前在新命令提示符下启动 dotnet.exe 而无需关闭它?

How to lauch dotnet.exe in a new command prompt without closing it before I call CloseMainWindow?

我想在批处理文件中启动 .NET Core Web 应用程序,然后向其发送客户端请求,然后关闭该 Web 应用程序。

cd $PSScriptRoot
$DevWebRootPath=$PSScriptRoot+"\MyWebApp\bin\Debug\netcoreapp2.0"
$WebAssembly="MyWebApp.dll"
cd $DevWebRootPath
$processInfo = New-Object System.Diagnostics.ProcessStartInfo("dotnet.exe", $WebAssembly)
$process = [System.Diagnostics.Process]::Start($processInfo)

Invoke-RestMethod http://localhost:5000/api/codegen -Method POST -InFile "$($PSScriptRoot)\MyWebApp\Payload.json" -ContentType "application/json"

$process.CloseMainWindow()
cd $PSScriptRoot

但是,托管 .net 核心进程的 CMD window 在启动后立即消失,在 Invoke-RestMethod 或 process.CloseMainMaindow() 可以 运行 之前。我曾在 iisexpress.exe 和 asp.net Web API 上尝试过类似的做法,效果很好。

如何在调用 CloseMainWindow 之前在新的命令提示符下启动 dotnet.exe 而不关闭它?

我会尽可能避免手动 .NET 操作并依赖内置方法(这就是 cmdlet 的全部意义所在):

$path = "$PSScriptRoot\MyWebApp\bin\Debug\netcoreapp2.0"
$procArgs = @{
    FilePath         = "$path\dotnet.exe"
    ArgumentList     = "$path\MyWebApp.dll"
    WorkingDirectory = $path
    PassThru         = $true
}
$process = Start-Process @procArgs

$restArgs = @{
    Uri         = 'http://localhost:5000/api/codegen'
    Method      = 'Post'
    InFile      = "$PSScriptRoot\MyWebApp\Payload.json"
    ContentType = 'application/json'
}
Invoke-RestMethod @restArgs

$process.CloseMainWindow() # Should be `$process | Stop-Process`

默认情况下,Start-Process 会在新控制台中打开 window,除非您使用 -NoNewWindow