- PR -

レジストリのトランザクション処理について

1
投稿者投稿内容
myobu
会議室デビュー日: 2008/11/05
投稿数: 3
投稿日時: 2008-11-05 17:08
お世話になっております。

Windowsのレジストリ変更について、
処理をトランザクションにしてロールバックを行うと言うのは可能でしょうか?
レジストリ変更を含む一連の処理の中でエラーが発生した場合に、
レジストリの値を変更前の情報に戻したいと考えています。
変更前の情報を保存しておいて書き戻すというのもありますが、
DB的なロールバックが可能であれば確実かと思います。
開発言語はC#です。

よろしくお願いいたします。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-11-05 17:26
引用:

Windowsのレジストリ変更について、
処理をトランザクションにしてロールバックを行うと言うのは可能でしょうか?
(略)
DB的なロールバックが可能であれば確実かと思います。



Windows のレジストリには、DB的なロールバックを行う機能はありません。
自前で何とかするほかないと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-11-06 19:03
レジストリのバックアップを取っておけば良いお話ではないのでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-11-06 22:55
引用:

myobuさんの書き込み (2008-11-05 17:08) より:
Windowsのレジストリ変更について、
処理をトランザクションにしてロールバックを行うと言うのは可能でしょうか?


Windows NT 3.5 あたりの古い知識で回答します。
レジストリー操作のトランザクションってできるんじゃなかったっけ?と思って探してみましたが、なんだかないみたいですね。
ちなみに RegFlushKey という API が存在することから考えて、わざわざ Flush があるのだから、やはりトランザクション(のコミットやロールバック)に相当する機能はなさそうだと思います。
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 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 で対応しそうな気はする)。

とはいえ現状だと環境を選びすぎるので手動処理を基本にして使えるときに使うように後々追加するという感じのものかと。
myobu
会議室デビュー日: 2008/11/05
投稿数: 3
投稿日時: 2008-11-07 10:31
返信ありがとうございます。
動作環境にWindowsXPが含まれていますので、直接制御する方式しか無さそうです。
実は元々WSUS APIについての問題ですので、そちらからも確認してみます。

1

スキルアップ/キャリアアップ(JOB@IT)