メイン画像

Windows フォームアプリの終了コードが常に 0 になる

Windows フォームアプリの終了コードが常に 0 になる


Windows アプリケーション(Windows フォームアプリ)をコマンドプロンプト(cmd.exe)からバッチファイルとして起動している。

ところがプログラムの終了コード(ERRORLEVEL)が常に 0 になってしまう。

(もちろん、プログラムからは 0 以外の値も返している)

終了コードとして 1 を返すだけのプログラムを作ってテストしてみた。

namespace WinFormsApp1
{
    internal static class Program
    {
        [STAThread]
        static int Main()
        {
            return 1;
        }
    }
}

テストの結果、ERRORLEVEL は 0 だった。

本当は 1 になるはずなのになぜ?

> WinFormsApp1.exe

> echo %ERRORLEVEL%
0

どうやらコマンドプロンプトは、Windows アプリケーションとして作られたプログラムの終了を待たないらしい。

ERRORLEVEL が常に 0 になる原因は、起動したプログラムから終了コードを受け取る前に終わっているからだった。

起動したプログラムの終了を待つようにするには、start コマンドを使う。

start コマンドに WAIT オプションを付けると、プログラムを同期実行してくれる。

> start /WAIT  WinFormsApp1.exe

> echo %ERRORLEVEL%
1

アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事