.NET アセンブリの終了コードが状況によってどのように変わるかを実験します。
この記事は
.NET Framework 1.1 (version 1.1.4322.573) に基づいて記述しています。
[System.Environment.ExitCode] を利用することによって,アプリケーションから終了コード返すことができます。
既定値は 0 です。
この [ExitCode] はアプリケーションを異常終了させるなどするとどんな値が返ってくるのでしょうか?
実験してみましょう。
[Main メソッド] のみを実行する単純なアプリケーションを構築して,このアプリケーションに以下の状況を適用して終了コードを確認します。
- 何もしない
- 明示的な値を設定する
- アプリケーション内でトラップされない例外を発生させる
- アプリケーションをタスクマネージャから強制終了させる
Public Class TestExitCode
Public Shared Sub Main()
' 何もしない場合は次の行をコメントアウト
System.Environment.ExitCode = 100
' 例外を発生させる場合は次の行をコメント解除
'Throw New ApplicationException
End Sub
End Class
ヒント
終了コードを返す他の方法について
[System.Environment.ExitCode] を利用する方法以外にも,
- [Main メソッド] の戻り値を利用する。
- [System.Environment.Exit] の引数を利用する。
方法があります。
アプリケーションで特に何もしなければ,既定の値である 0 がもちろん返ります。
一方,トラップされない例外が発生した場合や,アプリケーションを異常終了させた場合は特別な値が返ってきます。
これらの値は,明示的に終了コードを設定しても上書きされてしまいます。
| 状況 | コード |
| 終了コードをアプリケーションで制御しない | 0 |
| 終了コードを明示的に設定する | 任意の値 |
| トラップされない例外が発生した場合 | -532,459,699 0xE0434F4D |
| アプリケーションを強制的に終了した場合 | -1,073,741,510 0xC000013A |
以上を踏まえて,カスタムアプリケーションで終了コードを使用する際の基準は以下のようにルールを設定してはどうでしょうか。
| コード | 用途 |
| 0 | 正常終了 |
| 正の数 | 原則使用しない アプリケーションの終了ステータスを定義したい場合は,1,2,4,8 とビットフラグ化する |
| 負の数 | 異常終了 |
-532,459,699 0xE0434F4D | 想定外の例外が発生 原則例外処理は行うこと |
-1,073,741,510 0xC000013A | アプリケーションを強制的に終了した場合 |
| Int32.MinValue | アプリケーションの開始と共に設定する初期値 これを用いることによって,終了コードの設定し忘れをデバッグ時に確認できる |