• 締切済み

.NETアプリケーションの戻り値

.NET(C#)のコンソールアプリケーションを起動し、動作中にタスクマネージャから強制終了したときの戻り値について教えてください。 以下のサイト http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2006/06/28/838.aspx には、強制終了時の戻り値は「-1073741510」とありました。 ところが実際にサンプルPGを作ってやってみたところ、戻り値は「1」となります。 PG的には単純にMainの中でSleepの1行だけしか書いておらず、 Sleep中にタスクマネージャからプロセスを終了しています。 サンプルPGの呼出は.batのファイルからです。 (1)事実として「1」が戻ってきているのですが、それが正しいのでしょうか? 正しいとして、何かドキュメントなど情報はありますでしょうか? (2)強制終了時に「-1073741510」を返すようにすることは可能でしょうか? ■環境 Windows Server 2003(x86) / Windows 7(x86) .NET 3.5 SP1

みんなの回答

回答No.1

タスクマネージャからの強制終了は,TerminateProcess APIを使った強制終了にほぼ等しいわけですが, TerminateProcess APIの第2引数は終了コードです。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms686714(v=vs.85).aspx つまり,TerminateProcessされた場合の終了コードは,強制終了させる側が決定します。 強制終了される側のプロセスは,直ちに全てのスレッドが強制終了させられます。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms686722(v=vs.85).aspx > all threads of the process are terminated immediately with no chance to run additional code. この時点で強制終了に対して介入できないため, 強制終了される側のプロセスで終了コードを設定することはできません。 (1) について。 ドキュメントに書かれていない限り,「正しい」とも「正しくない」とも言えません。 但し,上記の理由により,タスクマネージャ以外によって強制終了させられた時に, 異なる終了コードを返す可能性は十分あり得ます。 (2) について。 強制終了に介入できないため,不可能です。 強制終了させる側のアプリケーションを作るのであれば,そのアプリケーションからの強制終了に限り特定の終了コードを返すことは可能ですが。

すると、全ての回答が全文表示されます。

関連するQ&A