- - PR -
レジストリのトランザクション処理について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-05 17:08
お世話になっております。
Windowsのレジストリ変更について、 処理をトランザクションにしてロールバックを行うと言うのは可能でしょうか? レジストリ変更を含む一連の処理の中でエラーが発生した場合に、 レジストリの値を変更前の情報に戻したいと考えています。 変更前の情報を保存しておいて書き戻すというのもありますが、 DB的なロールバックが可能であれば確実かと思います。 開発言語はC#です。 よろしくお願いいたします。 | ||||
|
投稿日時: 2008-11-05 17:26
Windows のレジストリには、DB的なロールバックを行う機能はありません。 自前で何とかするほかないと思います。 | ||||
|
投稿日時: 2008-11-06 19:03
レジストリのバックアップを取っておけば良いお話ではないのでしょうか?
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-11-06 22:55
Windows NT 3.5 あたりの古い知識で回答します。 レジストリー操作のトランザクションってできるんじゃなかったっけ?と思って探してみましたが、なんだかないみたいですね。 ちなみに RegFlushKey という API が存在することから考えて、わざわざ Flush があるのだから、やはりトランザクション(のコミットやロールバック)に相当する機能はなさそうだと思います。 | ||||
|
投稿日時: 2008-11-07 10:09
では新しい知識も追加で。
6.0(Vista/Server 2008) で KTM(Kernel Transaction Manager)、TxR(Transactional Registry)という機能が追加されています(逆にいえばそれまでにはないってことですけど)。お望みのレジストリの場合、 CreateTransaction ↓ RegOpenKeyTransacted/RegCreateKeyTransacted/RegDeleteKeyTransacted ↓ RegSetValueEx/RegQueryValueEx ↓ RegCloseKey ↓ CommitTransaction/RollbackTransaction みたいな感じでトランザクションが実行できるようです。現状 C# でということになると API を直接使用するしかないみたいですが(将来的には TransactionScope で対応しそうな気はする)。 とはいえ現状だと環境を選びすぎるので手動処理を基本にして使えるときに使うように後々追加するという感じのものかと。 | ||||
|
投稿日時: 2008-11-07 10:31
返信ありがとうございます。
動作環境にWindowsXPが含まれていますので、直接制御する方式しか無さそうです。 実は元々WSUS APIについての問題ですので、そちらからも確認してみます。 |
1