如何从启动此 JVM 的 Windows 程序中获取 JVM 退出代码(调用中的“状态”值:System.exit(status))?我尝试使用 ShellExecute() 调用的结果,但结果 (42) 与状态的实际值无关。
2 回答
使用 ShellExecuteEx 而不是 ShellExecute 启动外部应用程序。
在调用 ShellExecuteEx 之前,在 ShellExecuteEx 函数的参数中启用 SEE_MASK_NOCLOSEPROCESS 标志。然后,您将在 ShellExecuteEx 函数参数的 hProcess 字段中接收到已启动进程的句柄。
ShellExecuteEx: http: //msdn.microsoft.com/en-us/library/bb762154 (VS.85).aspx
然后,使用 WaitForSingleObject 函数或任何其他 WaitFor* 函数等待外部应用程序终止。
WaitForSingleObject:http: //msdn.microsoft.com/en-us/library/ms687032.aspx
然后,使用 GetExitCodeProcess 函数读取外部进程的退出代码。
GetExitCodeProcess: http: //msdn.microsoft.com/en-us/library/ms683189 (VS.85).aspx
该函数的MSDN 文档清楚地表明它不会从被调用的应用程序返回退出代码。
如果函数成功,则返回大于 32 的值。如果函数失败,则返回指示失败原因的错误值。为了向后兼容 16 位 Windows 应用程序,返回值被转换为 HINSTANCE。然而,这不是一个真正的 HINSTANCE。它只能转换为 int 并与 32 或以下错误代码进行比较。
在 MSDN 上似乎也有一些用于获取退出状态的示例代码。