【问题标题】:Returning error codes from process when using CreateProcess使用 CreateProcess 时从进程返回错误代码
【发布时间】:2011-12-15 14:53:53
【问题描述】:

所以我正在对一些代码进行自动化测试。有一个从名为“cmdLineProc”的命令行运行的可执行文件。

我正在用 C++ 编写我的测试程序(不使用 Python,或者因为我们使用的 API 可以加快这些测试的速度)。 命令行参数在测试中作为字符串生成,并传递给使用 CreateProcess 运行 cmdLineProc 的函数。 这工作正常。我可以调用 cmdLineProc 并且它可以工作并且测试通过了。但只有在没有返回错误的情况下。

在测试时,我需要检查事情是否在应该失败的时候也失败了。在这些情况下,cmdLineProc 返回一个错误值。

因此,如果我在命令行上运行 cmdLineProc 并使用将使其失败的参数,我会收到一条消息“错误,失败:-3”,其中 -3 是错误代码。 但是当我使用 CreateProcess 通过 C++ 测试运行它时,我遇到了一个问题。 CreateProcess 只是失败并返回-1,表示它失败的代码。它没有说明失败的原因。 我使用 GetExitCodeProcess 来获取 cmdLineProc 的终止状态。

任何人都知道是否有可能从 cmdLineProc 使用此方法返回的错误值返回?如果没有,有人知道我将如何实现这一点吗?

【问题讨论】:

  • GetLastError 对我不起作用。它只返回 0。这是我第一次使用这个东西,但我尝试将 GetLastError() 放在代码中的几个不同位置,但每次它只返回 0。
  • 对不起。我以为CreateProcess 失败了,但是如果它返回非零值(-1)则意味着成功。
  • 看到您应该解析 cmdLineProc 写入标准输出的内容
  • 我不明白为什么cmdLineProc 不返回-3 而不是-1
  • CreateProcess的返回类型是BOOL。那不可能是-1,某处存在更大的问题。邮政编码。

标签: c++ winapi createprocess


【解决方案1】:

GetExitCodeProcess 返回运行进程的退出代码。如果您在运行程序时看到另一个错误显示,那么创建的进程只是将另一个错误写入标准输出。

在这种情况下,您将不得不解析所创建进程的输出。

您可以看到这是如何完成的here

【讨论】:

  • 好的。为帮助的小伙子欢呼。我试一试。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多