終了ステータスの取得する方法はありますか?

解決


はじめ  2006-09-02 02:10:22  No: 62889

こんにちは。

現在の状況です。
・アプリケーションA,Bがあります。
・BはAの中から、『CreateProcess』によって起動されます。
・AはBが終了するまで、『WaitForSingleObject』で待機してます。
・Bが終了したら、Aの処理が再開します。

ここで、Bが正常終了したか、異常終了したのかが、知りたいのです。
その結果によってAの処理を振り分ける必要があります。
なにかBの終了ステータスみたいなのを取得する関数は、あるのでしょうか?

また、『CreateProcess』『WaitForSingleObject』を必ず使用する必要は無いので、他の良い方法がありましたら、教えていただけたらと思ってます。

最終手段として、アナログですが、Bが終了する時、どっかにファイルを作成して、Aがソレを監視して存在してたら正常、存在してなかったら異常と、扱うようにしようかなと思います(それぐらいしか浮かびません)。


Blue  2006-09-02 02:17:25  No: 62890

類似スレ
GetExitCodeProcessで、例外か正常終了か?
http://forums.belution.com/ja/vc/000/100/53s.shtml


はじめ  2006-09-02 02:17:26  No: 62891

環境を報告しますと

WinXP Pro Ver2002 SP2
VC++ 6.0 SP6

です。


はじめ  2006-09-02 02:52:24  No: 62892

リンク先拝見しましたが、ちっと意味合いが違ってました。
たぶん、自分の説明がおかしかったのだと思います。

たとえば、Bが、ファイルの存在をチェックするアプリとします。

ファイルが存在したら、Aにtureを返したい。
ファイルが存在しなかったら、Aにfalseを返したい

と、言うことです。
まるまるアプリひとつを、関数みたく扱いたいのです。


Blue  2006-09-02 03:01:31  No: 62893

Aはどういうアプリになっているんでしょうか?

普通に

int main()
{
     // ファイルあるがあったら
     if ( 〜〜〜〜〜 )
         return 0;

    return -1;
}

というようなつくりになっていれば、GetExitCodeProcessで結果が取れますよ。
>・プロセスの main または WinMain 関数の戻り値。

また、結果をstdoutに出力して(printf等で出力)、パイプでその結果を取得するとか。


はじめ  2006-09-02 03:10:33  No: 62894

どういうアプリとは、どういうアプリのことを言ってるのでしょう?


Blue  2006-09-02 03:52:54  No: 62895

>Aはどういうアプリになっているんでしょうか?
ごめんなさい。Bのことです。

>どういうアプリとは、どういうアプリのことを言ってるのでしょう?
コンソールアプリか、Windowsアプリか?
main または WinMain 関数で、特定のの戻り値を返すのか?
結果がstdoutに出力されるのか?


はじめ  2006-09-04 18:53:40  No: 62896

>コンソールアプリか、Windowsアプリか?

WindowsアプリでMFCを使用してます。EXEです。

>main または WinMain 関数で、特定のの戻り値を返すのか?

WinMainを使用してますが、隠蔽されていますよね?
戻り値を返すようにできるのでしょうか?

>結果がstdoutに出力されるのか?

stdoutは使用していません。


subaru  2006-09-04 19:10:18  No: 62897

>WinMainを使用してますが、隠蔽されていますよね?
>戻り値を返すようにできるのでしょうか?
CWinApp::ExitInstance の戻り値じゃないの?


はじめ  2006-09-04 23:18:56  No: 62898

CWinApp::ExitInstanceから取得できました。
ありがとございました。


はじめ  2006-09-04 23:19:30  No: 62899

解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加