none
レジストリデータ取得について RRS feed

  • 質問

  • 質問です。
    レジストリ取得について質問ですが、
    Dobon.net や様々なサンプルソースを見ても理解出来なかったので
    教えて下さい。

    私は、
    HKEY_LOCAL_MACHINE\SOFTWARE\****\**** 内にある
    InstallDirのアドレスデータ(c:\Program File/...)を取得してテキストボックスに
    表示させたいのですが、方法が分りません。

    最初に私は
    'レジストリからの読み取り
    
    Dim regkey As Microsoft.Win32.RegistryKey = _
    Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\****\****", False )
    If regkey Is Nothing Then
    Return
    End If


    'REG_EXPAND_SZデータ型の値を取得する
    Dim stringValue As String
    '展開して取得する
    stringValue = CStr (regkey.GetValue("InstallDir"))
    Console.WriteLine(stringValue)
    '展開せずに取得する
    stringValue = CStr (regkey.GetValue("InstallDir", "", _
    Microsoft.Win32.RegistryValueOptions.DoNotExpandEnvironmentNames))
    Textbox1.text = stringValue
    '閉じる
    regkey.Close()

    のサンプルコードで取得しようと思ったのですが、
    Formloadの時、ちゃんと読んでくれません。
    messagebox.showでも試しましたがメッセージすら出てきません。


    どうすれば読み取ってテキストに表示出来るでしょうか?
    出来ればソースを書いて頂ければ有難いです。
    2009年7月4日 2:26

回答

  • HKEY_LOCAL_MACHINE\SOFTWARE\****\**** 内にある

    のを取得したいのに、

    Microsoft.Win32.RegistryKey = _
        Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\****\****", False
    
    

    CurrentUser を見に行っちゃ駄目だと思いますが……。

    2009年7月4日 3:09
  • Registry.CurrentUserの意味は調べましたか?
    http://msdn.microsoft.com/ja-jp/library/microsoft.win32.registry.currentuser.aspx

    これを使っている時点で"HKEY_CURRENT_USER\"が先頭につくと思って下さい。
    例えば Microsoft.Win32.Registry.CurrentUser.OpenSubKey("HKEY_LOCAL_MACHINE") と書いた場合、HKEY_CURRENT_USER\HKEY_LOCAL_MACHINE というパスになります。

    HKEY_LOCAL_MACHINEの値を取得したいのであれば、同じRegistryクラスのメンバで扱っているものを調べてみて下さい。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年7月4日 12:54
    モデレータ
  • 最初のコードとの相違点を調べましょう。

    RegistryクラスはMicrosoft.Win32名前空間にあるものです。
    特定の名前空間にあるクラスはその名前空間をImportsするか、Microsoft.Win32.Registryというように名前空間をつけて使用しなければなりません。

    Importsを書く場合はファイルの先頭に書きましょう。


    ちょっと古い記事ですが、参考として書いておきます。
    http://msdn.microsoft.com/ja-jp/library/dd314350.aspx
    http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_06/vbnet2_06_02.html


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年7月4日 23:13
    モデレータ

すべての返信

  • HKEY_LOCAL_MACHINE\SOFTWARE\****\**** 内にある

    のを取得したいのに、

    Microsoft.Win32.RegistryKey = _
        Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\****\****", False
    
    

    CurrentUser を見に行っちゃ駄目だと思いますが……。

    2009年7月4日 3:09
  • 最初は HKEY_LOCAL_MACHINE\SOFTWARE\****\**** でやっても駄目で、
    サンプルコード記載がSoftから始まってたので、改変したのですが、
    無理でした・・・。

    2009年7月4日 5:17
  • Registry.CurrentUserの意味は調べましたか?
    http://msdn.microsoft.com/ja-jp/library/microsoft.win32.registry.currentuser.aspx

    これを使っている時点で"HKEY_CURRENT_USER\"が先頭につくと思って下さい。
    例えば Microsoft.Win32.Registry.CurrentUser.OpenSubKey("HKEY_LOCAL_MACHINE") と書いた場合、HKEY_CURRENT_USER\HKEY_LOCAL_MACHINE というパスになります。

    HKEY_LOCAL_MACHINEの値を取得したいのであれば、同じRegistryクラスのメンバで扱っているものを調べてみて下さい。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年7月4日 12:54
    モデレータ
  • registryクラスで
     Dim rKeyName As String = "SOFTWARE\Microsoft\.NETFramework"
    ' 取得処理を行う対象となるレジストリの値の名前
    Dim rGetValueName As String = "InstallRoot"

    ' レジストリの取得
    Try
    ' レジストリ・キーのパスを指定してレジストリを開く
    Dim rKey As RegistryKey = Registry.LocalMachine.OpenSubKey(rKeyName)

    ' レジストリの値を取得
    Dim location As String = CStr(rKey.GetValue(rGetValueName))

    ' 開いたレジストリを閉じる
    rKey.Close()

    ' コンソールに取得したレジストリの値を表示
    Console.WriteLine(location)
    Catch ex As NullReferenceException
    ' レジストリ・キーまたは値が存在しない
    Console.WriteLine("レジストリ[" + rKeyName + "]の[" + rGetValueName + "]がありません!")

    と書いたんですが、
    エラー 1:
    型 'Registry' が定義されていません。と怒られて
    使う事が出来ませんでした。
    サンプルコード等を書いて頂ければ有難いのですが・・・。



    2009年7月4日 18:18
  • 最初のコードとの相違点を調べましょう。

    RegistryクラスはMicrosoft.Win32名前空間にあるものです。
    特定の名前空間にあるクラスはその名前空間をImportsするか、Microsoft.Win32.Registryというように名前空間をつけて使用しなければなりません。

    Importsを書く場合はファイルの先頭に書きましょう。


    ちょっと古い記事ですが、参考として書いておきます。
    http://msdn.microsoft.com/ja-jp/library/dd314350.aspx
    http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_06/vbnet2_06_02.html


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年7月4日 23:13
    モデレータ
  • こんにちは、フォーラムオペレータの高橋春樹です。

    Hongliangさん、Azuleanさん、いつもお世話になってます。

    Politurさん、初めまして。
    MSDNフォーラムのご利用ありがとうございます。

    Azuleanさんからアドバイスを頂いたと思うのですが、その後如何でしょうか?
    今回、HongliangさんとAzuleanさんからの投稿が有用な情報であったと思いましたので、
    勝手ながら、回答マークを付けさせて頂きました。
    問題が解決していない、もしくは不適切と思われた場合は、回答マークを外す事も可能です。

    今後ともMSDNフォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    2009年7月15日 8:47