【问题标题】:ExitCode always has null does not show the actual return value from exeExitCode 总是有 null 不显示 exe 的实际返回值
【发布时间】:2019-10-16 00:05:13
【问题描述】:

我正在从 powershell 脚本调用我的 exe,如下所示。

$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。 当我尝试从 powershell 脚本获取 ExitCode(使用 $LASTEXITCODE)时,它总是显示 null(既不是 1 也不是 0),但我的 exe 按预期返回 1。 如何在powershell脚本中获取exe的返回值?

【问题讨论】:

标签: c# powershell return return-value


【解决方案1】:

你可以用这个:

$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,这段代码已经过全面测试,我让它在几个不同的地方工作,有几个不同的应用程序。您是否尝试过使用不同的方法从您的应用程序中获取 retval?您是否在知名应用程序中尝试过此代码并检查它是否返回了您期望的结果?问题出在您的应用程序中。通常 0 是“无错误”,其他是“错误”,但你可以返回任何你想要的。我不介意你做什么,但不确认这个解决方案是否有效可能会产生误导。请解释为什么您认为您的应用没有返回该数字。
猜你喜欢
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 2015-09-10
相关资源
最近更新 更多