Запуск очистки после сбоя программы - PullRequest
3 голосов
/ 18 сентября 2011

В настоящее время я пишу довольно простое приложение, но оно вносит изменения в ОС, которая меняется после закрытия программы.

Беспокойство, конечно, в случае сбоя программы.Я могу сделать все, что в моих силах, чтобы предотвратить его сбой или что-то сделать в случае сбоя, но я не могу помешать кому-либо принудительно закрыть процесс (если я не могу?)

Есть ли способперехватить это событие и выполнить очень быструю очистку перед завершением процесса?

Ответы [ 4 ]

2 голосов
/ 18 сентября 2011

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

1 голос
/ 18 сентября 2011

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

То есть, кто-то на самом деле просто убивает процесс, с этим ничего нельзя поделать.

0 голосов
/ 18 сентября 2011

Если вы не возражаете против небольшого взаимодействия с кодом C или C ++, и если вы работаете в Windows Vista или новее, вы можете использовать API восстановления и перезапуска приложений.Эти API-интерфейсы говорят Windows перехватывать ваш процесс, когда происходит что-то катастрофическое, так что вы можете вызвать небольшой код очистки, прежде чем Windows полностью убьет процесс.

См. http://msdn.microsoft.com/en-us/library/cc948909.aspx.

0 голосов
/ 18 сентября 2011

Программа в обороне.

Запишите исходные настройки в файл. Удалить файл при закрытии. При запуске проверьте, есть ли файл - если это так, ваш процесс был убит, и вы знаете, для чего вернуть настройки.

Программирование 201 - основы транзакций, применяемые к системным настройкам при выполнении программы в качестве границы транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...