.NET TIPS リモート・コンピュータのレジストリを参照/操作するには?[C#、VB]デジタルアドバンテージ 一色 政彦2007/09/20  | 
![]()  | 
「TIPS:レジストリの値を取得するには?」や「TIPS:レジストリの値を設定するには?」では、利用中のローカル・コンピュータ(いわゆる「マイ コンピュータ」)のレジストリを取り扱う方法を紹介したが、Windowsではリモート・コンピュータ(=別のコンピュータ)のレジストリ(「ネットワーク レジストリ」と呼ばれる)も参照・操作することができる。
次の画面はレジストリ・エディタを使ってリモート・コンピュータのレジストリを参照/操作している例だ。
![]()  | 
| レジストリ・エディタによるリモート・コンピュータのレジストリの参照/操作 | 
| この例では「Server01」というリモート・コンピュータのレジストリを参照している。なお、レジストリ・エディタは起動するには、[スタート]メニューの[ファイル名を指定して実行]をクリックして[ファイル名を指定して実行]ダイアログを起動し、そのダイアログのテキストボックスに「regedit」を入力して実行する。 | 
本稿では、このようなリモート・コンピュータのレジストリを、.NET Frameworkのクラス・ライブラリを使って参照/操作する方法を紹介する。
ネットワーク・レジストリを参照/操作する方法
ローカル・コンピュータであろうと、リモート・コンピュータであろうと、基本的なレジストリの参照/操作方法はほぼ変わらない。違うのは基本キーだけである。基本キーとは、レジストリの参照・操作を行う基点となるRegistryKeyオブジェクト(=Microsoft.Win32名前空間のRegistryKeyクラスのインスタンス)のことだ。
基本キーは、ローカル・コンピュータの場合、Registryクラス(Microsoft.Win32名前空間)の静的フィールドであるLocalMachineフィールドやCurrentUserフィールドを利用して取得するが、リモート・コンピュータの場合、Registryクラスの静的メソッドであるOpenRemoteBaseKeyメソッドを使う。
OpenRemoteBaseKeyメソッドは、第1パラメータにRegistryHiveオブジェクト(=Microsoft.Win32名前空間のRegistryHive列挙体のメンバ)を、第2パラメータにリモート・コンピュータの名前(例えば「Server01」などの文字列)を受け取り、戻り値として基本RegistryKeyオブジェクト(=基本キー)を返す。RegistryHive列挙体のメンバは次の表のとおりだ。
| RegistryHive列挙体のメンバ | 取得される基本キー | 
| RegistryHive.ClassesRoot | HKEY_CLASSES_ROOT | 
| RegistryHive.CurrentConfig | HKEY_CURRENT_CONFIG | 
| RegistryHive.CurrentUser | HKEY_CURRENT_USER | 
| RegistryHive.DynData | HKEY_DYN_DATA | 
| RegistryHive.LocalMachine | HKEY_LOCAL_MACHINE | 
| RegistryHive.PerformanceData | HKEY_PERFORMANCE_DATA | 
| RegistryHive.Users | HKEY_USERS | 
| RegistryHive列挙体のメンバと、取得される基本キー | |
| いずれの基本キー(=基本RegistryKeyオブジェクト)も「リモート・コンピュータのレジストリ」であることに注意。 | |
以上で基本キーが取得できたら、あとは前述のとおり、ローカル・コンピュータの場合と同じ方法で、レジストリの参照/操作を行えばよい。
 それでは、例えば「Server01」という名前のリモート・コンピュータの「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths」配下のキーを列挙する場合を考えてみよう(関連:「TIPS:レジストリのキーを列挙するには?」)。
まず、OpenRemoteBaseKeyメソッドの第1パラメータに「RegistryHive.LocalMachine」を、第2パラメータに「"Server01"」を指定して基本RegistryKeyオブジェクトを取得する。そして、このオブジェクトが持つOpenSubKeyメソッドを、開きたいレジストリのキーのパス名「SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths」をパラメータに指定して呼び出す(※パス名は「HKEY_LOCAL_MACHINE」などのルート名を省略する必要がある)。これにより、開きたいキーに対応したRegistryKeyオブジェクト(=親キー)が取得できるので、あとはこのオブジェクトが持つGetSubKeyNamesメソッドを呼び出せば、その親キーの配下にあるすべてのサブ・キー(=子キー)の名前が、文字列配列型の戻り値として取得できる。
以上の処理を実装したコード例を次に示す。
 
  | 
||
| リモート・コンピュータのレジストリを参照するコンソール・アプリケーションのサンプル・プログラム(上:C#、下:VB) | 
  開いたキーを閉じるため、RegistryKeyオブジェクトのCloseメソッドを呼び出すことを忘れないようにしてほしい。![]()
| カテゴリ:クラス・ライブラリ 処理対象:レジストリ 使用ライブラリ:Registryクラス(Microsoft.Win32名前空間) 使用ライブラリ:RegistryKeyクラス(Microsoft.Win32名前空間) 関連TIPS:レジストリの値を取得するには? 関連TIPS:レジストリの値を設定するには? 関連TIPS:レジストリのキーを列挙するには?  | 
 
 
  | 
||||||||||||||||||||||||||||
| 「.NET TIPS」 | 
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える 
 
  | 
 |






