2

この JVM を起動した Windows プログラムから JVM 終了コード (呼び出しからの「ステータス」の値: System.exit(status)) を取得するにはどうすればよいですか? ShellExecute() 呼び出しの結果を使用しようとしましたが、結果 (42) はステータスの実際の値とは無関係でした。

4

2 に答える 2

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

于 2009-05-05T01:45:00.153 に答える
1

その関数のMSDN ドキュメントは、呼び出されたアプリケーションから終了コードを返さないことを明確にしています。

関数が成功すると、32 より大きい値が返されます。関数が失敗すると、失敗の原因を示すエラー値が返されます。戻り値は、16 ビット Windows アプリケーションとの下位互換性のために HINSTANCE としてキャストされます。ただし、これは真の HINSTANCE ではありません。int にのみキャストでき、32 または以下のエラー コードと比較できます。

MSDN にも終了ステータスを取得するためのサンプル コードがあるようです。

于 2009-04-23T23:59:23.683 に答える