Существует ли какой-либо механизм транзакций файловой системы, доступный для приложения .net? - PullRequest
5 голосов
/ 11 марта 2010

Я реализую простой механизм обновления для приложения. Я пишу, что последняя часть процесса обновления состоит в переименовании исполняемого файла текущего приложения из чего-то вроде myApp.exe в myApp.old.exe, а затем переименовании свежего загруженный и обновленный файл из myApp.new.exe в myApp.exe.

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

Так есть ли вообще сделать обновление безотказным?

1 Ответ

2 голосов
/ 11 марта 2010

На 2008 / Vista вверх да, хотя не выставлено. В этот момент NTFS получила транзакции файловой системы на уровне файловой системы / ядра.

Пожалуйста, проверьте:

http://www.michaelckennedy.net/blog/2007/12/07/SystemTransactionsAndWindowsVistaNTFSUpdated.aspx

http://www.codeguru.com/cpp/misc/misc/fileio/article.php/c9987

http://xavierdecoster.wordpress.com/2009/10/18/transactional-ntfs-txf/

У них есть примеры кода.

...