web-dev-qa-db-ja.com

どのような場合にプログラムは0x40010004コードで終了しますか?

私のプログラムは、Windowsプラットフォームで実行するように設計されています。

時にはそれはエラーで終了します。インストールされている各コンピューターでデバッグできませんでした。そこで、ベクトル化された例外ハンドラーを追加して、例外に関する情報をサーバーに送信します。いくつかの0xC0000005例外がありました。修正しましたが、プログラムは終了します(PCでエラーを再現できませんでした)。

メインプロセスハンドルを待機し、メインプロセスが終了したときにプロセス終了コードを含むレポートを送信する別のプログラムを作成しました。私は終了コードを見ました、そしてそれらのほとんどは0x40010004DBG_TERMINATE_PROCESS)でした。この終了コードは、デバッガーがアプリケーションに接続されて終了したときに表示されることを知っています。しかし、私はデバッガがないと確信しています。

それで... DBG_TERMINATE_PROCESS終了コードで処理できる他のケースはどれですか?

10
cls

TerminateProcessには終了コードパラメータがあるため、理論的には何でもかまいません。

実際には、システムのシャットダウンが原因である可能性が高いです。 Windowsがシャットダウンすると、実行中のプログラムを正常に終了しようとします(詳細については ここ )。終了を拒否した場合は、システムによって終了コード0x40010004で終了する可能性があります。たとえば、モーダルダイアログを表示するGUIプログラムがあり、システムをシャットダウンしようとすると、「xy.exeがシャットダウンを妨げている」というメッセージが表示されます。 [強制シャットダウン]をクリックすると、プロセスは終了コード0x40010004で強制終了されます。

これを再現しようとする場合は、アプリケーションのプロセスを待機しているプログラムHANDLEがメインアプリの終了前に終了する可能性があることに注意してください。

14
Donpedro