2011-03-02 20 views
6

最後の起動に先立ってWindowsの停電が検出されたかどうかを知ることができますか?Windowsがクラッシュまたは電源障害後にリブートしたときの検出

これを検出したいのは、自分のサービスでディスク上で頻繁に変更するファイルをいつ再スキャンするのかを知るためです。

通常のスタートアップがある場合、シャットダウンがスムーズになり、メモリ内のファイルバッファに保存されていたデータがディスクにフラッシュされている可能性があります。

答えて

1

単純な実装では、CreateFileをFILE_FLAG_DELETE_ON_CLOSE(不確実にFlushFileBuffersが続いている)で動作させないでください。

システムが正常にシャットダウンすると、アプリケーションは終了し、ファイルハンドルは閉じられ、OSはファイルを削除します。

電源が切れるか、世界が終了すると、OSはハンドルを閉じるか、ファイルを削除する機会を得られません。したがって、ファイルは、システムが再起動した後も引き続き存在します。

+0

これはLinuxでもうまくいくかもしれませんが、面白いです! –

5

電源障害の検出は、異常終了の可能性のある1つの原因をカバーします。これを実行する安全な方法は、起動時にマーカーファイルを作成し、正常にシャットダウンしたときにマーカーファイルを削除することです。次の起動時にマーカーファイルが存在する場合、サービスが正常終了していないことがわかります。

電源損失のみを調べたい場合は、最後のシャットダウンが予期しなかったかどうかを、event logで確認してください。

2

あなたのプロセスが優雅に終了したかどうかをチェックしてみませんか?いくつかの特別なマーカーをレジストリまたはファイルシステムに置きます。つまり、プロセスはまだ動作しており、gracefullのシャットダウン時に削除されます。その後、起動時に確認してください。

関連する問題