私のプログラムは、Windowsプラットフォームで実行するように設計されています。
時にはそれはエラーで終了します。インストールされている各コンピューターでデバッグできませんでした。そこで、ベクトル化された例外ハンドラーを追加して、例外に関する情報をサーバーに送信します。いくつかの0xC0000005
例外がありました。修正しましたが、プログラムは終了します(PCでエラーを再現できませんでした)。
メインプロセスハンドルを待機し、メインプロセスが終了したときにプロセス終了コードを含むレポートを送信する別のプログラムを作成しました。私は終了コードを見ました、そしてそれらのほとんどは0x40010004
(DBG_TERMINATE_PROCESS
)でした。この終了コードは、デバッガーがアプリケーションに接続されて終了したときに表示されることを知っています。しかし、私はデバッガがないと確信しています。
それで... DBG_TERMINATE_PROCESS
終了コードで処理できる他のケースはどれですか?
TerminateProcess
には終了コードパラメータがあるため、理論的には何でもかまいません。
実際には、システムのシャットダウンが原因である可能性が高いです。 Windowsがシャットダウンすると、実行中のプログラムを正常に終了しようとします(詳細については ここ )。終了を拒否した場合は、システムによって終了コード0x40010004
で終了する可能性があります。たとえば、モーダルダイアログを表示するGUIプログラムがあり、システムをシャットダウンしようとすると、「xy.exeがシャットダウンを妨げている」というメッセージが表示されます。 [強制シャットダウン]をクリックすると、プロセスは終了コード0x40010004
で強制終了されます。
これを再現しようとする場合は、アプリケーションのプロセスを待機しているプログラムHANDLE
がメインアプリの終了前前に終了する可能性があることに注意してください。