*

[.NET, C#]レジストリの値が取得できない原因

公開日: : 最終更新日:2015/01/12 .NET, C#, Microsoft

正しいPathを指定しているのに

Registry レジストリ C# .NET
図のような ‘HKEY_CURRENT_MACHINE\SOFTWARE\HOGE’ のサブキーである ‘HogeSubKey’ というレジストリの値をC#で取得する場合以下のようなソースになります。

string keyName = @"SOFTWARE\HOGE"

using (var rKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(keyName)) {
	try {
		string keyValue = (string)rKey.GetValue("HogeSubKey");
		MessageBox.Show(keyValue);
	} catch (NullReferenceException excep) {
		// キーが見つからないときの処理
	}
}

Pathは明らかに正しく値も確実にあるのですが、しかしNullReferenceExceptionが発生し、値を取得出来ませんでした。

原因は64bitのOSだから!

すっかり忘れていたのですが、OSが64bitに変わっていました。
64bitの場合ですと、ハイブが32bitと異なる場所を参照してしまいます。
ですので、正しく参照するように設定しなくてはなりません。

修正

ソース

string keyName = @"SOFTWARE\HOGE"

using(var reg32 = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, Microsoft.Win32.RegistryView.Registry64))
using(Microsoft.Win32.RegistryKey rKey = reg32.OpenSubKey(keyName)) {
	try {
		string keyValue = (string)rKey.GetValue("HogeSubKey");
		MessageBox.Show(keyValue);
	} catch (NullReferenceException excep) {
		// キーが見つからないときの処理
	}
}

実行結果

Hogestring Registry レジストリ
このように32bitのレジストリを参照するようにしてあげると意図した値を取得することが出来るかと思います。

ad

関連記事

Delgate Multi Thread

[C#]マルチスレッドとイベントハンドラでデータベースのテーブルの値の変更を検知する。

システム利用中にデータベースの内容が更新 こういったシステムは往々にしてあるかと思います。 特に

記事を読む

Unity_

[Unity]Unity2Dでパズドラのようにタイルを動かす

今回からスクリプトがかなり難しくなってくるかも。 前回の続き。 というわけで前回はドラッグで

記事を読む

unity socket

[Unity]Socket通信でP2Pすっぞ 接続待ち受け

P2Pしましょ。 まずはサーバーとして待ちうけまで作ります。 UnityだとNAT越えどうす

記事を読む

unity

[Unity]コードリファレンス GameObjectを親子関係にする。

親子関係にして、親が動いたら子も動くような動きをさせます。 transform.parentプ

記事を読む

logo

[C#]AS400のメンバーを指定してデータにアクセスする

◆前提条件◆ CliantAccessをインストールしている。 .NET Framework3.

記事を読む

Excel Csharp

[C#]DataGridViewにプロパティを利用しながら配列をバインドする。

DataGridView C#のFormにデータを表示するのに便利なコントロールがあります。 デ

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 画面上のGameObjectを左下から取得する

前回、画面上のオブジェクトを一括で手に入れる方法はわかりました。 しかし、これではどのオブジェクト

記事を読む

TeamFoundation

[TFS]Team Foundation Server Express構築手順

Team Foundation Server Express構築のときの手順です。 うちでは今のと

記事を読む

logo

Accessがスプラッシュ画面で動作を停止するときの対処

PCを切り替えてAccessをインストールし、しばらくしてからAccessが起動しなくなりました。

記事を読む

Wannabenote

[Unity]Unity2Dチュートリアル 繰り返しパズルを消す その2

Unityまとめページはこちら。 前回の続き。 準備が出来たので、ソースを変更致しましょ

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑