Я вызываю свой 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"
}
У меня есть основная функция int в моей exe-программе, которая возвращает 1 в случае успеха и 0 в случае неудачи. Когда я пытаюсь получить ExitCode (используя $LASTEXITCODE) из сценария powershell, он всегда показывает ноль (ни 1, ни 0), но мой exe возвращает 1, как и ожидалось. Как получить возвращаемое значение exe в сценарии powershell?
Вы можете использовать это:
$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()
, чтобы дождаться завершения процесса.
То, что вы пробовали, не получает код выхода приложения, а то, что приложение записывает в стандартную консоль, что, как я полагаю, в вашем случае ничего не значит. Если бы вы могли изменить exe для записи в консоль, то, что вы сделали, сработало бы.
код выхода возвращает отрицательное значение -532462766 для успешного случая, когда я использовал приведенный выше код.
@RemSan, этот код полностью протестирован, и он работает в нескольких разных местах с несколькими разными приложениями. Вы пытались получить ретвал из своего приложения другим способом? Вы пробовали этот код с известным приложением и проверяли, что он возвращает то, что вы ожидаете? Проблема в вашем приложении. В общем случае 0 — это «нет ошибки», а что-то еще — «ошибка», но вы можете вернуть все, что захотите. Я не возражаю против того, что вы делаете, но не подтвердить, что это решение работает, может ввести в заблуждение. Пожалуйста, объясните, почему вы думаете, что ваше приложение не возвращает этот номер.
Возможный дубликат Запускайте исполняемый файл из PowerShell и получайте отзывы об успехе или неудаче