この JVM を起動した Windows プログラムから JVM 終了コード (呼び出しからの「ステータス」の値: System.exit(status)) を取得するにはどうすればよいですか? ShellExecute() 呼び出しの結果を使用しようとしましたが、結果 (42) はステータスの実際の値とは無関係でした。
2 に答える
ShellExecute の代わりに ShellExecuteEx を使用して、外部アプリケーションを開始します。
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 にも終了ステータスを取得するためのサンプル コードがあるようです。