2012-02-15 10 views
0

アプリケーションの前回の終了コードは何ですか?Windows上のアプリケーションの前回の終了コードの取得

最後にゼロ終了コード(私の場合は異常終了を意味します)でアプリケーションが終了していないかどうかを確認したい場合は、いくつかのチェックを行い、以前に生成されたデータを修正/クリーンアップします。

いくつかのアプリケーションがこれをしているので(今度はセーフモードで実行するかどうかを尋ねる警告が表示されます)、おそらくWindowsがこれを教えてくれると思います。

もしそうでない場合、これを実行するベストプラクティスは何ですか?アプリケーションが正しく終了したときにファイルまたは何かにフラグを設定し、次回の実行時にそれを確認しますか?

答えて

1

いいえ、終了コードの永続記録はありません。これは、プロセスのハンドルが開いたままである限り、存在します。 GetExitCodeProcess()によって返された場合、そのハンドルが必要です。最後のハンドルが閉じられるとすぐに、その終了コードは正常に消えてしまいます。 1つの手法は、プロセスを開始してハンドルを保持する小さなブートストラップアプリです。また、警告を送信したり、ログを保存したり、部分的なファイルをクリーンアップしたり、クラッシュのミニダンプを記録したりするなど、他の便利な機能を実行することもできます。 WaitForSingleObject()を使用してプロセスの終了を検出します。

Btw、あなたは間違いなく反対のことを意味するコード番号を終了したいと思います。ゼロは常に「正常終了」値です。これはハードクラッシュを検出するのに役立ちます。 Windowsが例外コードを強制的にアプリケーションを終了すると、終了コードは常にゼロ以外の値になります。

他の方法があります。実際にプロセスが実行されていることを示すファイルまたはレジストリキーを作成し、バックアップが開始されたときにそれを確認できます。あなたが何か意味のあることを何度もやる必要があるのは、ユーザーがプログラムを2回起動するときだけです。解決するのは難しい問題ですが、そのようなアプリは通常はシングルインスタンスアプリです。名前付きミューテックスを使用して、プログラムのインスタンスがすでに実行中であることを検出します。プロセスIDと開始時刻の証拠を刷り込むことは実行可能です。

1

Windowsプラットフォームでこれを行う標準的な方法はありません。

このケースを処理する最も簡単な方法は、レジストリに値を設定し、プログラムが終了すると値を消去することです。

プログラムの開始時に値がまだ残っていると、予期せず終了しました。 HKCU/Softwareに値を設定して、十分な権限があることを確認します(この場合は、ユーザーごとに値が設定されます)。

関連する問題