1. ホーム
  2. windows

[解決済み] どのような場合に0x40010004のコードでプログラムが終了するのでしょうか?

2022-01-29 21:41:22

質問

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

時々、エラーで終了してしまいます。そのため、例外に関する情報をサーバーに送信するベクター例外ハンドラを追加しました。その際、いくつかの 0xC0000005 例外を修正しましたが、それでもプログラムは終了してしまいます(私のPCではエラーを再現できませんでした)。

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

では、他にどのような場合に DBG_TERMINATE_PROCESS の終了コードを教えてください。

解決方法は?

理論的な面では、次のようになります。 TerminateProcess には終了コードパラメータがあります。

実用面では、システムのシャットダウンが原因である可能性が高いです。Windowsはシャットダウンするとき、実行中のプログラムを優雅に終了させようとします(詳しくは ここで ). もし、終了を拒否された場合は、システムによって終了コード 0x40010004 . 例えば、モーダルダイアログを表示するGUIプログラムがあり、その後システムをシャットダウンしようとすると、 "xy.exe is preventing shutdown" というメッセージが表示されるでしょう。もし、"Force shutdown"をクリックすると、そのプロセスは終了コード 0x40010004 .

これを再現しようとすると、アプリケーションのプロセスで待機しているプログラムが HANDLE が終了する可能性があります。 以前 メインアプリの