.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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|