ExitCode всегда имеет значение null, не показывает фактическое возвращаемое значение из exe - PullRequest
0 голосов
/ 30 мая 2019

Я вызываю свой exe-файл из сценария powershell, как показано ниже.

$file = $PSScriptRoot + "\executor.exe"
$code = (Start-Process -WindowStyle Hidden $file -Verb runAs -ArgumentList $Logfile).StandardOutput.ToString;
$nid = (Get-Process "executor.exe").id
Wait-Process -Id $nid

if ($code -eq 1) {
    LogWrite "Execution succeeded"
} else
{
    LogWrite "Execution Failed"
}

В моей программе exe есть функция int main, которая возвращает 1 в случае успеха и 0 в случае сбоя.Когда я пытаюсь получить ExitCode (используя $ LASTEXITCODE) из сценария powershell, он всегда показывает ноль (ни 1, ни 0), но мой exe возвращает 1, как и ожидалось.Как мне получить возвращаемое значение exe в сценарии powershell?

1 Ответ

0 голосов
/ 30 мая 2019

Вы можете использовать это:

$psi = New-Object System.Diagnostics.ProcessStartInfo
$psi.FileName = # path to your exe file

# additional options:
$psi.UseShellExecute = $false
$psi.CreateNoWindow = $false
$psi.WindowStyle = "Maximized"


$p = New-Object System.Diagnostics.Process
$p.StartInfo = $psi
$p.Start() | Out-Null # returns $true if the process started, $false otherwise
$p.WaitForExit()

# here's the exitcode
$exitCode = $p.ExitCode

Создать информацию о запуске процесса, указать путь к исполняемому файлу и дополнительные параметры.Важно использовать .WaitForExit() для ожидания завершения процесса.

То, что вы пытались получить, не получает код выхода из приложения, а то, что приложение записывает в стандартную консоль, что, как я полагаю, в вашем случае являетсяничего такого.Если бы вы могли изменить исполняемый файл для записи в консоль, то то, что вы сделали, сработало бы.

...