|
.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レジストリへアクセス
この作業手順は実際のプログラムでも大差ない。.NETプログラムでは、まずレジストリ・キーを開くために、RegistryKeyクラス(Microsoft.Win32名前空間)のOpenSubKeyメソッドを呼び出す。このメソッドを呼び出すには、RegistryKeyクラスのオブジェクトが必要だが、これには、Registryクラス(Microsoft.Win32名前空間)の静的フィールドであるLocalMachineオブジェクトやCurrentUserオブジェクトが利用できる。なお、LocalMachineフィールドはローカル・コンピュータの構成情報を扱い、CurrentUserフィールドはユーザー設定に関する情報を扱うことができる。ほかにもClassesRootフィールドなどがあるが、よく使われるのは前述の2つのフィールドだ。なお、OpenSubKeyメソッドは、開きたいレジストリ・キーを引数に指定して呼び出す必要がある。
OpenSubKeyメソッドを呼び出すと、その戻り値としてRegistryKeyクラスのオブジェクトが取得できる。次に、このオブジェクトのGetValueメソッドを呼び出す。取得したいレジストリの「値」の名前を指定してこのメソッドを呼び出すと、その「値」のデータを取得できる。
最後に、さきほど開いたレジストリ・キーを閉じるため、RegistryKeyオブジェクトのCloseメソッドを呼び出す。
この処理の実際のコードを以下に示す。
|
|
| レジストリから値のデータを取得するプログラム | |
| サンプル・プログラム(C#:regget.cs、VB.NET:regget.vb)のダウンロード |
なお、レジストリ・キーや値が存在しない場合は、NullReferenceException例外(System名前空間)が発生する。この例外をハンドルすると、レジストリにキーや値がない場合にも対処できる。
レジストリ値を設定する方法については「TIPS:レジストリの値を設定するには?」で解説している。![]()
| カテゴリ:クラス・ライブラリ 処理対象:レジストリ 使用ライブラリ:Registryクラス(Microsoft.Win32名前空間) 使用ライブラリ:RegistryKeyクラス(Microsoft.Win32名前空間) 使用ライブラリ:NullReferenceException例外(System名前空間) 関連TIPS:レジストリの値を設定するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



