Как запустить dotnet.exe в новой командной строке, не закрывая ее перед вызовом CloseMainWindow? - PullRequest
0 голосов
/ 21 мая 2018

Я хотел бы запустить веб-приложение .NET Core в пакетном файле, а затем отправить ему клиентский запрос, а затем закрыть веб-приложение.

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

Однако в окне CMD, в котором находится.Процесс net core просто исчезает сразу после запуска, до того, как Invoke-RestMethod или process.CloseMainMaindow () могут быть запущены.Я пробовал аналогичные методы с iisexpress.exe и asp.net Web API, он работал хорошо.

Как запустить dotnet.exe в новой командной строке, не закрывая ее перед вызовом CloseMainWindow?

1 Ответ

0 голосов
/ 21 мая 2018

Я бы избегал ручного манипулирования .NET, где вы можете и полагаться на встроенные методы (вот и весь смысл командлетов):

$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 открывает окно вновая консоль, если вы не используете -NoNewWindow.

...