2010-04-20 3 views
0

Я пишу приложение, цель которого заключается в большом количестве регистрации различных событий. Среди них я также хотел бы, чтобы событие было закрыто - даже если это было неожиданно, из-за потери мощности.Как отслеживать, когда приложение неожиданно отключилось?

Естественно, когда мощность отключается, я ничего не могу написать нигде. Поэтому моя идея заключалась в том, чтобы постоянно писать временную метку в каком-то известном месте (скажем, один раз в минуту), а когда приложение было в следующем запуске, оно могло определить приблизительное время неожиданного отключения. Для меня приемлема точность 1 минута.

Однако я обеспокоен тем, что кэширование на уровне ОС и на диске может помешать этому подходу. Есть ли лучший способ или если нет - как убедиться, что данные, которые я только что написал, ДЕЙСТВИТЕЛЬНО выписаны на физический носитель?

Добавлено: О, почти забыл линию модного слова: Windows XP и выше; .NET 3.5; C#.

ответ

1

Edit: убрана неправильный ответ (из-за не читая вопрос правильно)

Вы можете использовать метод FlushFileBuffers, но это все равно будет только записать его на устройство, вы все еще не можете получить фактический диск написать (насколько я знаю).
http://www.pinvoke.net/default.aspx/kernel32/FlushFileBuffers.html?diff=y

+0

Нет, это только очищает внутренний буфер FileStrem, а не кэш операционной системы. –

+0

Если вы беспокоились о миллисекундах или секундах, я мог понять, почему вы будете беспокоиться об этом, но я никогда не испытывал, что OS/Disk будет хранить крошечные вещи в кеше в течение нескольких минут, не записывая их. Это может произойти в исключительных обстоятельствах или в странных конфигурациях, но я думал, что это будет очень необычно. –

+0

Ну, я не мог найти документацию об этом. В самом деле, если бы я мог быть уверен, что через несколько секунд он покраснет, все будет хорошо. В противном случае я думал, что это можно провести там бесконечно. И поскольку файл был бы очень маленьким и очень часто доступным, я полагал, что у него будет очень хороший шанс остаться в кеше навсегда (пока система не выключится). –

2

Неожиданные отключения регистрируются в системном журнале событий.

Когда приложение будет закрыто, напишите его в свой файл журнала. В следующий раз, когда ваше приложение начнет проверять, было ли ваше приложение закрыто так, как предполагалось, в противном случае проверьте журнал системных событий.

+0

Приложение может быть неожиданно отключено во многих отношениях. –

+0

И большинство этих непредвиденных выходов регистрируются в журнале событий системы/приложения. Проверка журнала событий по-прежнему является лучшей идеей, чем запись временных меток каждую минуту. – ZippyV

+0

Я имею в виду, что приложение может также потерпеть крах или быть прекращено или что-то в этом роде. Это никуда не денется. –

Смежные вопросы