.NET TIPS

レジストリの値を取得するには?

デジタルアドバンテージ
2004/02/06

 Windowsレジストリ(以降、レジストリ)は、アプリケーションの構成/設定情報などを格納するためのWindows特有のデータベースだ。現在のWin32環境では、このレジストリに重要な情報が格納されている場合が多い。例えば、.NET Frameworkの構成/設定情報もこのレジストリに格納されていて、このレジストリを参照することで「.NET Frameworkがインストールされているフォルダ」や「.NET Framework SDKがインストールされているフォルダ」を取得できる。

 このようにレジストリにはアプリケーションの動作を左右する重要な構成/設定情報が格納されているので、直接、プログラムからレジストリを参照したい場合もあるだろう。そのような場合、.NET Frameworkが提供するRegistryKeyクラス(Microsoft.Win32名前空間)を利用することで、レジストリに格納されたデータを参照することが可能だ。

Windowsレジストリの構造

 このRegistryKeyクラスの使用方法の説明に入る前に、まずレジストリの構造について解説しておこう。

 レジストリは階層構造で管理されている。階層構造の代表例としてはWindowsのファイル・システムを挙げることができるが、Windowsのファイル・システムでは「フォルダ」によって階層が形成され、その中に「ファイル」がある。これと同じように、レジストリにも「キー(Key)」による階層があり、その中に「値(Value)」がある。よって、レジストリの値のデータを取得する場合、まずレジストリのキー(ファイル・システムの場合のフォルダ)を開いて、次に値(ファイル・システムの場合のファイル)からデータを取得しなければならない。

 この一連の作業を、Windowsに標準インストールされている「レジストリ エディタ」を使って実践してみよう。レジストリ・エディタを起動するには、[スタート]メニューの[ファイル名を指定して実行]をクリックして[ファイル名を指定して実行]ダイアログを起動し、そのダイアログのテキスト・ボックスで「regedit」と入力して実行するのが簡単だ。

 これによりレジストリ・エディタが起動するので、レジストリ・エディタの左側の階層ツリーの中から、例えば、レジストリ・キーである[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]を選択する(「キーを開く」という作業)。そして次に、右側のリスト表示の中から[InstallRoot]という値(Value)を参照する。するとこの場合には、この値の右側にデータとして「.NET Frameworkがインストールされているフォルダ」が表示されているはずである(「値からデータを取得する」という作業)。このようにして、レジストリから.NET Frameworkのインストール先のフォルダの情報を取得できる。

レジストリ・エディタ
Windowsに標準でインストールされている。レジストリ・エディタを起動するには、[スタート]メニューの[ファイル名を指定して実行]をクリックして[ファイル名を指定して実行]ダイアログを起動し、そのダイアログのテキスト・ボックスに「regedit」を入力して実行する。
  レジストリ・キーを選択する。この例では[マイ コンピュータ\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]を選択する。HKEY_LOCAL_MACHINEで始まるレジストリ・キーの前に「マイ コンピュータ」というコンピュータ名が表示されているが、自分のコンピュータ以外の、ネットワーク上のコンピュータのレジストリも参照できるため、それと区別するために、レジストリ・エディタではレジストリ・キーの前にコンピュータ名が付加される。
  選択中のキーがステータス・バーに表示される。この例では、[マイ コンピュータ\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]と表示されている。
  レジストリの値の名前。この例では、.NET Frameworkのインストール先を意味する「InstallRoot」。
  レジストリの値に実際に格納されているデータ。この例では、「C:\WINDOWS\Microsoft.NET\Framwork\」。

プログラムからWindowsレジストリへアクセス

 この作業手順は実際のプログラムでも大差ない。.NETプログラムでは、まずレジストリ・キーを開くために、RegistryKeyクラス(Microsoft.Win32名前空間)のOpenSubKeyメソッドを呼び出す。このメソッドを呼び出すには、RegistryKeyクラスのオブジェクトが必要だが、これには、Registryクラス(Microsoft.Win32名前空間)の静的フィールドであるLocalMachineオブジェクトやCurrentUserオブジェクトが利用できる。なお、LocalMachineフィールドはローカル・コンピュータの構成情報を扱い、CurrentUserフィールドはユーザー設定に関する情報を扱うことができる。ほかにもClassesRootフィールドなどがあるが、よく使われるのは前述の2つのフィールドだ。なお、OpenSubKeyメソッドは、開きたいレジストリ・キーを引数に指定して呼び出す必要がある。

 OpenSubKeyメソッドを呼び出すと、その戻り値としてRegistryKeyクラスのオブジェクトが取得できる。次に、このオブジェクトのGetValueメソッドを呼び出す。取得したいレジストリの「値」の名前を指定してこのメソッドを呼び出すと、その「値」のデータを取得できる。

 最後に、さきほど開いたレジストリ・キーを閉じるため、RegistryKeyオブジェクトのCloseメソッドを呼び出す。

 この処理の実際のコードを以下に示す。

static void Main(string[] args)
{
  // 操作するレジストリ・キーの名前
  string rKeyName = @"SOFTWARE\Microsoft\.NETFramework";
  // 取得処理を行う対象となるレジストリの値の名前
  string rGetValueName = "InstallRoot";

  // レジストリの取得
  try
  {
    // レジストリ・キーのパスを指定してレジストリを開く
    RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName);

    // レジストリの値を取得
    string location = (string)rKey.GetValue(rGetValueName);

    // 開いたレジストリ・キーを閉じる
    rKey.Close();

    // コンソールに取得したレジストリの値を表示
    Console.WriteLine(location);
  }
  catch (NullReferenceException)
  {
    // レジストリ・キーまたは値が存在しない
    Console.WriteLine("レジストリ[" + rKeyName
      + "]の[" + rGetValueName + "]がありません!");
  }
}
レジストリから値のデータを取得するプログラム
サンプル・プログラム(C#:regget.cs、VB.NET:regget.vb)のダウンロード

 なお、レジストリ・キーや値が存在しない場合は、NullReferenceException例外(System名前空間)が発生する。この例外をハンドルすると、レジストリにキーや値がない場合にも対処できる。

 レジストリ値を設定する方法については「TIPS:レジストリの値を設定するには?」で解説している。End of Article

カテゴリ:クラス・ライブラリ 処理対象:レジストリ
使用ライブラリ:Registryクラス(Microsoft.Win32名前空間)
使用ライブラリ:RegistryKeyクラス(Microsoft.Win32名前空間)
使用ライブラリ:NullReferenceException例外(System名前空間)
関連TIPS:レジストリの値を設定するには?
 
この記事と関連性の高い別の.NET TIPS
レジストリの値を列挙するには?
レジストリのキーを列挙するには?
レジストリの値を設定するには?
レジストリの値のデータ型を判別するには?
リモート・コンピュータのレジストリを参照/操作するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間